blob: 282f0ac63ea1b0b964685447ddebce45d59ac8ee [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2011 Luis Carlos Moreira da Costa.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Luis Carlos Moreira da Costa (tcljava at gmail dot com) - initial API and implementation
*******************************************************************************/
package org.mihalis.opal.dynamictablecolumns;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.TableColumn;
/**
* DynamicTableColumn.
*/
public class DynamicTableColumn extends TableColumn {
/** The original resizable. */
private boolean originalResizable = false;
/**
* Constructor.
*
* @param parent DynamicTable
* @param style int
*/
public DynamicTableColumn(final DynamicTable parent, final int style) {
super(parent, style);
// Config the preferred length of columns.
addListener(SWT.Resize, new Listener() {
@Override
public void handleEvent(final Event event) {
if (getResizable()) {
final DynamicTableColumnLayout dynamicLayout = getParent().getLayout();
final DynamicColumnData data = dynamicLayout.getColumnData(DynamicTableColumn.this);
final DynamicLength preferredfLength = data.getPreferredLength();
if (preferredfLength.getMeasure() == DynamicLengthMeasure.PIXEL) {
preferredfLength.setValue((double) getWidth());
}
getParent().layout();
}
}
});
}
/**
* Constructor.
*
* @param parent DynamicTable
* @param style int
* @param index int
*/
public DynamicTableColumn(final DynamicTable parent, final int style, final int index) {
super(parent, style, index);
}
/**
* Set width.
*
* @param preferredLength String
*/
public void setWidth(final String preferredLength) {
getParent().getLayout().setColumnData(this, preferredLength);
}
/**
* Set width.
*
* @param preferredLength String
* @param minLength String
*/
public void setWidth(final String preferredLength, final String minLength) {
final DynamicColumnData columnData = new DynamicColumnData(this, preferredLength, minLength);
getParent().getLayout().setColumnData(columnData);
setResizable(this.originalResizable);
}
/* (non-Javadoc)
* @see org.eclipse.swt.widgets.TableColumn#setResizable(boolean)
*/
@Override
public void setResizable(final boolean resizable) {
this.originalResizable = resizable;
final DynamicTableColumnLayout dynamicLayout = getParent().getLayout();
final DynamicColumnData data = dynamicLayout.getColumnData(DynamicTableColumn.this);
super.setResizable(this.originalResizable && data.getPreferredLength().getMeasure() != DynamicLengthMeasure.PERCENTAGE);
}
/* (non-Javadoc)
* @see org.eclipse.swt.widgets.TableColumn#getParent()
*/
@Override
public DynamicTable getParent() {
return (DynamicTable) super.getParent();
}
/* (non-Javadoc)
* @see org.eclipse.swt.widgets.TableColumn#checkSubclass()
*/
@Override
protected void checkSubclass() {
// Disable the check that prevents subclassing of SWT components.
}
}