[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Newsgroup Home]
|
[news.eclipse.platform.swt] MeasureItem suppressing Table Resize Events?
|
- From: jfordham@xxxxxxxxxx (Jared Fordham)
- Date: Sat, 26 Apr 2008 19:53:20 +0000 (UTC)
- Newsgroups: eclipse.platform.swt
- Organization: Eclipse
- User-agent: NewsPortal/0.36 (http://florian-amrhein.de/newsportal)
Hello-
I'm noticing an inconsitent resize event behavior when the MeasureItem
adjusts the size of my table. If I don't adjust the height then
everything seems to be fine.
Windows Vista
org.eclipse.swt (3.3.0.v3346)
I've created a snippet that illustrates the problem I'm seeing.
The add button will put new rows into the table. The table resize
listener will adjust the size of the parent.
The change height button enables the MeasureItem listener to increase the
height of the table rows.
After enabling measureItem, the table resize listener is never called.
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.ScrolledComposite;
import org.eclipse.swt.events.ControlAdapter;
import org.eclipse.swt.events.ControlEvent;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.ExpandBar;
import org.eclipse.swt.widgets.ExpandItem;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableItem;
public class TableSizeSnippet {
static ExpandBar bar = null;
static ExpandItem item = null;
static Table table0 = null;
static ScrolledComposite scroller = null;
public static void main(String[] args) {
final Display display = new Display();
final Shell shell = new Shell(display);
shell.setText("Table Size Tester");
GridLayout gridLayout = new GridLayout(5, false);
shell.setLayout(gridLayout);
final Button add = new Button(shell, SWT.PUSH);
add.setText("Add");
final Button hide = new Button(shell, SWT.PUSH);
hide.setText("Hide");
final Button show = new Button(shell, SWT.PUSH);
show.setText("Show");
final Button toggle = new Button(shell, SWT.TOGGLE);
toggle.setText("Change Height");
final Button tryAgain = new Button(shell, SWT.PUSH);
tryAgain.setText("Try Again");
tryAgain.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
shell.setRedraw(false);
toggle.setSelection(false);
disposeControls();
createControls(shell);
addListeners(toggle);
shell.layout();
bar.setSize(bar.computeSize(scroller.getClientArea().width, SWT.DEFAULT));
shell.setRedraw(true);
}
});
hide.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
scroller.setVisible(false);
}
});
show.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
scroller.setVisible(true);
}
});
add.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
TableItem tableItem1 = new TableItem(table0, SWT.NONE);
tableItem1.setText("Another Item");
}
});
toggle.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
table0.redraw();
}
});
createControls(shell);
addListeners(toggle);
shell.setSize(400, 300);
shell.layout();
bar.setSize(bar.computeSize(scroller.getClientArea().width,
SWT.DEFAULT));
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
private static void disposeControls() {
scroller.dispose();
bar.dispose();
item.dispose();
table0.dispose();
bar = null;
item = null;
table0 = null;
scroller = null;
}
private static void createControls(final Shell shell) {
scroller = new ScrolledComposite(shell, SWT.V_SCROLL);
scroller.setAlwaysShowScrollBars(true);
scroller.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true,
true, 5, 1));
scroller.getVerticalBar().setIncrement(30);
bar = new ExpandBar(scroller, SWT.NONE);
scroller.setContent(bar);
item = new ExpandItem(bar, SWT.NONE);
item.setText("Table");
table0 = new Table(bar, SWT.BORDER);
item.setControl(table0);
table0.setLinesVisible(true);
TableItem tableItem1 = new TableItem(table0, SWT.NONE);
tableItem1.setText("Item1");
TableItem tableItem2 = new TableItem(table0, SWT.NONE);
tableItem2.setText("Item2");
item.setHeight(table0.computeSize(bar.getBounds().width,
SWT.DEFAULT).y);
item.setExpanded(true);
}
private static void addListeners(final Button toggle) {
table0.addListener(SWT.MeasureItem, new Listener() {
@Override
public void handleEvent(Event event) {
if (toggle.getSelection())
event.height = 50;
}
});
table0.addControlListener(new ControlAdapter() {
@Override
public void controlResized(ControlEvent e) {
item.setHeight(table0.computeSize(bar.getBounds().width,
SWT.DEFAULT).y);
bar.setSize(bar.computeSize(scroller.getClientArea().width, SWT.DEFAULT));
}
});
bar.addMouseListener(new MouseAdapter() {
@Override
public void mouseUp(MouseEvent e) {
bar.setSize(bar.computeSize(scroller.getClientArea().width, SWT.DEFAULT));
}
});
}
}