Home » Eclipse Projects » NatTable » How to combine FreezeLayer and ColumnGroupHeaderLayer
| |
Re: How to combine FreezeLayer and ColumnGroupHeaderLayer [message #1082227 is a reply to message #1081642] |
Thu, 08 August 2013 09:14 |
Joachim Fuchs Messages: 34 Registered: February 2013 |
Member |
|
|
Thank you for the hint. So far I managed to merge the freeze and the column group example that it looks decent and almost behaves as expected. Unfortunately pushing a freeze command to the table the columns/rows to freeze are simply being hidden. What is wrong here?
Here is the interesting part of my code:
private void createBoth(Composite parent) {
ColumnGroupModel columnGroupModel = new ColumnGroupModel();
ColumnHeaderLayer columnHeaderLayer;
// Body
String[] propertyNames = RowDataListFixture.getPropertyNames();
Map propertyToLabelMap = RowDataListFixture.getPropertyToLabelMap();
DefaultBodyDataProvider bodyDataProvider = new DefaultBodyDataProvider(RowDataListFixture.getList(200),
propertyNames);
final FreezeLayerStack freezeLayerStack = new FreezeLayerStack(new DataLayer(bodyDataProvider),
columnGroupModel);
// Column header
DefaultColumnHeaderDataProvider defaultColumnHeaderDataProvider = new DefaultColumnHeaderDataProvider(
propertyNames, propertyToLabelMap);
DefaultColumnHeaderDataLayer columnHeaderDataLayer = new DefaultColumnHeaderDataLayer(
defaultColumnHeaderDataProvider);
columnHeaderLayer = new ColumnHeaderLayer(columnHeaderDataLayer, freezeLayerStack,
freezeLayerStack.getSelectionLayer());
ColumnGroupHeaderLayer columnGroupHeaderLayer = new ColumnGroupHeaderLayer(columnHeaderLayer,
freezeLayerStack.getSelectionLayer(), columnGroupModel);
columnGroupHeaderLayer.addColumnsIndexesToGroup("Group 1", 1, 2);
columnGroupHeaderLayer.addColumnsIndexesToGroup("UnBreakable group 2", 4, 5, 6, 7);
columnGroupHeaderLayer.addColumnsIndexesToGroup("UnBreakable group 3", 8, 9, 10);
columnGroupHeaderLayer.addColumnsIndexesToGroup("Group 4", 11, 12, 13);
columnGroupHeaderLayer.addColumnsIndexesToGroup("Group 5", 14, 15, 16, 17);
columnGroupHeaderLayer.setStaticColumnIndexesByGroup("Group 5", 15, 17);
columnGroupHeaderLayer.setGroupUnbreakable(4);
columnGroupHeaderLayer.setGroupUnbreakable(8);
columnGroupHeaderLayer.setGroupAsCollapsed(11);
// Row header
final DefaultRowHeaderDataProvider rowHeaderDataProvider = new DefaultRowHeaderDataProvider(bodyDataProvider);
DefaultRowHeaderDataLayer rowHeaderDataLayer = new DefaultRowHeaderDataLayer(rowHeaderDataProvider);
ILayer rowHeaderLayer = new RowHeaderLayer(rowHeaderDataLayer, freezeLayerStack,
freezeLayerStack.getSelectionLayer());
// Corner
final DefaultCornerDataProvider cornerDataProvider = new DefaultCornerDataProvider(
defaultColumnHeaderDataProvider, rowHeaderDataProvider);
DataLayer cornerDataLayer = new DataLayer(cornerDataProvider);
ILayer cornerLayer = new CornerLayer(cornerDataLayer, rowHeaderLayer, columnGroupHeaderLayer);
// Grid
CompositeLayer gridLayer = new CompositeLayer(1, 2);
gridLayer.setChildLayer(GridRegion.COLUMN_HEADER, columnGroupHeaderLayer, 0, 0);
gridLayer.setChildLayer(GridRegion.BODY, freezeLayerStack, 0, 1);
gridLayer.setConfigLabelAccumulatorForRegion(GridRegion.BODY, new AlternatingRowConfigLabelAccumulator());
// GridLayer gridLayer = new GridLayer(freezeLayerStack, columnGroupHeaderLayer, rowHeaderLayer, cornerLayer);
NatTable bothTable = new NatTable(parent, gridLayer, false);
bothTable.addConfiguration(new DefaultRowStyleConfiguration());
// Register create column group command handler
// Register column chooser
DisplayColumnChooserCommandHandler columnChooserCommandHandler = new DisplayColumnChooserCommandHandler(
freezeLayerStack.getSelectionLayer(), freezeLayerStack.getColumnHideShowLayer(), columnHeaderLayer,
columnHeaderDataLayer, columnGroupHeaderLayer, columnGroupModel);
freezeLayerStack.registerCommandHandler(columnChooserCommandHandler);
bothTable.addConfiguration(new DefaultNatTableStyleConfiguration());
bothTable.getUiBindingRegistry().registerKeyBinding(new KeyEventMatcher(SWT.CTRL | SWT.SHIFT, 'f'),
new FreezeGridAction(true));
bothTable.configure();
}
class FreezeLayerStack extends AbstractIndexLayerTransform {
private ColumnReorderLayer columnReorderLayer;
private ColumnGroupReorderLayer columnGroupReorderLayer;
private ColumnHideShowLayer columnHideShowLayer;
private ColumnGroupExpandCollapseLayer columnGroupExpandCollapseLayer;
private SelectionLayer selectionLayer;
private FreezeLayer freezeLayer;
private CompositeFreezeLayer compositeFreezeLayer;
private ViewportLayer viewportLayer;
public FreezeLayerStack(IUniqueIndexLayer underlyingLayer, ColumnGroupModel columnGroupModel) {
columnReorderLayer = new ColumnReorderLayer(underlyingLayer);
columnGroupReorderLayer = new ColumnGroupReorderLayer(columnReorderLayer, columnGroupModel);
columnHideShowLayer = new ColumnHideShowLayer(columnGroupReorderLayer);
columnGroupExpandCollapseLayer = new ColumnGroupExpandCollapseLayer(columnHideShowLayer, columnGroupModel);
selectionLayer = new SelectionLayer(columnGroupExpandCollapseLayer);
viewportLayer = new ViewportLayer(selectionLayer);
freezeLayer = new FreezeLayer(viewportLayer);
compositeFreezeLayer = new CompositeFreezeLayer(freezeLayer, viewportLayer, selectionLayer);
setUnderlyingLayer(viewportLayer);
registerCommandHandler(new CopyDataCommandHandler(selectionLayer));
registerCommandHandler(new FreezeCommandHandler(freezeLayer, viewportLayer, selectionLayer));
}
public ColumnReorderLayer getColumnReorderLayer() {
return columnReorderLayer;
}
public ColumnGroupReorderLayer getColumnGroupReorderLayer() {
return columnGroupReorderLayer;
}
public ColumnHideShowLayer getColumnHideShowLayer() {
return columnHideShowLayer;
}
public ColumnGroupExpandCollapseLayer getColumnGroupExpandCollapseLayer() {
return columnGroupExpandCollapseLayer;
}
public SelectionLayer getSelectionLayer() {
return selectionLayer;
}
public ViewportLayer getViewportLayer() {
return viewportLayer;
}
/**
* @return the freezeLayer
*/
public FreezeLayer getFreezeLayer() {
return freezeLayer;
}
/**
* @return the compositeFreezeLayer
*/
public CompositeFreezeLayer getCompositeFreezeLayer() {
return compositeFreezeLayer;
}
}
J
|
|
| | | |
Goto Forum:
Current Time: Fri Apr 19 09:24:30 GMT 2024
Powered by FUDForum. Page generated in 0.01892 seconds
|