Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

GridEditor displayed at wrong offset for auto-height rows #76

Open
ceisserer opened this issue Nov 3, 2022 · 6 comments
Open

GridEditor displayed at wrong offset for auto-height rows #76

ceisserer opened this issue Nov 3, 2022 · 6 comments
Labels
question Further information is requested wontfix This will not be worked on

Comments

@ceisserer
Copy link
Contributor

When using autoHeight / varialbe height grid rows, GridEditor Widgets are not properly positioned - but instead are positioned where they would belong with standard row height.
My guess is, the problem originates from the height of the grid rows being computed client-side, but the GridEditor Widgets are layouted server-side.

public class BasicEntryPoint extends AbstractEntryPoint {

  protected void createContents(Composite parent) {
	parent.setLayout(null);
	
	Grid grid = new Grid(parent, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL);
	grid.setData(RWT.MARKUP_ENABLED, true);
	grid.setAutoHeight(true);
	grid.setBounds(100, 100, 500, 500);
	
	GridColumn actionCol = new GridColumn(grid,SWT.NONE);
	actionCol.setText("Action");
	actionCol.setMinimumWidth(200);
	
	GridColumn textCol = new GridColumn(grid,SWT.NONE);
	textCol.setText("Textcolumn");
	textCol.setWidth(200);
	
	generateItem(grid, "multi <br/> line");
	generateItem(grid, "single line");
  }
  
  void generateItem(Grid grid, String txt) {
	    GridItem item = new GridItem(grid,SWT.NONE);
	    item.setText(1, txt);

		Button b = new Button(grid, SWT.PUSH);
		b.setText("button");
		
		GridEditor editor = new GridEditor(grid);
		editor.minimumWidth = 150;
		editor.minimumHeight = 10;
		editor.setEditor(b, item, 0);
  }
}
@ifurnadjiev
Copy link
Contributor

ifurnadjiev commented Nov 7, 2022

Yes... the row height is calculated on the client and send to the server with the next request. I can only suggest a workaround here (re-layout the editor with timerExec):


  @Override
  protected void createContents( Composite parent ) {
    parent.setLayout( null );

    Grid grid = new Grid( parent, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL );
    grid.setData( RWT.MARKUP_ENABLED, true );
    grid.setAutoHeight( true );
    grid.setBounds( 100, 100, 500, 500 );

    GridColumn actionCol = new GridColumn( grid, SWT.NONE );
    actionCol.setText( "Action" );
    actionCol.setMinimumWidth( 200 );

    GridColumn textCol = new GridColumn( grid, SWT.NONE );
    textCol.setText( "Textcolumn" );
    textCol.setWidth( 200 );

    generateItem( grid, "multi <br/> line" );
    generateItem( grid, "single line" );

    parent.getDisplay().timerExec( 100, new Runnable() {
      @Override
      public void run() {
        for( GridItem item : grid.getItems() ) {
          ( ( GridEditor )( item.getData( "editor" ) ) ).layout();
        }
      }
    } );
  }

  void generateItem( Grid grid, String txt ) {
    GridItem item = new GridItem( grid, SWT.NONE );
    item.setText( 1, txt );

    Button b = new Button( grid, SWT.PUSH );
    b.setText( "button" );

    GridEditor editor = new GridEditor( grid );
    editor.minimumWidth = 150;
    editor.minimumHeight = 10;
    editor.setEditor( b, item, 0 );

    item.setData( "editor", editor );
  }

}```

@ceisserer
Copy link
Contributor Author

Thanks for the hint regarding the workaround.

This used to work when the row-hight was calculated immediatly on the client, but because height-calculation is now performed somehow asynchronous ( #75 ) sometimes the 100ms delay is enough and sometimes even 500ms is too short (large page, garbage collection hick-up, etc).

@ifurnadjiev
Copy link
Contributor

I'm about to fix issue #75 today.

@ifurnadjiev
Copy link
Contributor

The timerExec is only needed to start a server push request and trigger another UI request with updated item "height" property. The actual delay here is not important. Of course, this workaround will work after issue #75 is fixed (pull request is created).

@ifurnadjiev
Copy link
Contributor

About the workaround: To eliminate editor flickering when resizing it, you can create the editors in timerExec instead of calling layout.

@ifurnadjiev
Copy link
Contributor

Did you try the workaround? Can we close this issue as wontfix?

@ifurnadjiev ifurnadjiev added the wontfix This will not be worked on label Nov 25, 2022
@mknauer mknauer added the question Further information is requested label Nov 30, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
question Further information is requested wontfix This will not be worked on
Projects
None yet
Development

No branches or pull requests

3 participants