package com.vuze.tests.swt.tableview; import java.util.ArrayList; import java.util.List; import org.eclipse.swt.SWT; import org.eclipse.swt.events.KeyEvent; import org.eclipse.swt.events.KeyListener; import org.eclipse.swt.layout.*; import org.eclipse.swt.widgets.*; import org.gudy.azureus2.core3.config.COConfigurationManager; import org.gudy.azureus2.core3.util.*; import org.gudy.azureus2.plugins.ui.UIInputReceiver; import org.gudy.azureus2.plugins.ui.UIInputReceiverListener; import org.gudy.azureus2.ui.swt.SimpleTextEntryWindow; import org.gudy.azureus2.ui.swt.UIConfigDefaultsSWT; import org.gudy.azureus2.ui.swt.Utils; import org.gudy.azureus2.ui.swt.mainwindow.Colors; import org.gudy.azureus2.ui.swt.views.table.impl.TableViewSWTImpl; import com.aelitis.azureus.ui.common.table.TableColumnCore; import com.aelitis.azureus.ui.common.table.TableRowCore; import com.aelitis.azureus.ui.common.table.TableSelectionListener; import com.aelitis.azureus.ui.common.updater.UIUpdatable; import com.aelitis.azureus.ui.swt.uiupdater.UIUpdaterSWT; public class testTableView { private static TableViewSWTImpl<TableViewTestDS> tv; private static boolean pause = true; public static void main(String[] args) { Display display = new Display(); FormData fd; COConfigurationManager.initialise(); COConfigurationManager.setParameter("Table.useTree", true); COConfigurationManager.setParameter("Table.extendedErase", true); //COConfigurationManager.setParameter("GUI Refresh", 15000); UIConfigDefaultsSWT.initialize(); Colors.getInstance(); Shell shell = new Shell(display, SWT.SHELL_TRIM); FormLayout fl = new FormLayout(); shell.setLayout(fl); Composite cTV = new Composite(shell, SWT.BORDER); Composite cBottom = new Composite(shell, SWT.BORDER); Composite cToggles = new Composite(shell, SWT.BORDER); fd = Utils.getFilledFormData(); fd.bottom = new FormAttachment(cToggles, -5); cTV.setLayout(new FillLayout()); cTV.setLayoutData(fd); fd = Utils.getFilledFormData(); fd.top = null; fd.bottom = new FormAttachment(cBottom); cToggles.setLayout(new RowLayout()); cToggles.setLayoutData(fd); fd = Utils.getFilledFormData(); fd.top = null; cBottom.setLayout(new RowLayout()); cBottom.setLayoutData(fd); TableColumnCore[] columns = { new CT_ID(), new CT_InvalidOnly(), new CT_Live(), new CT_LiveExt(), new CT_InvOnlyExt(), new CT_InvOnlyReord(), }; com.aelitis.azureus.ui.common.table.impl.TableColumnManager.getInstance().addColumns(columns); tv = new TableViewSWTImpl<TableViewTestDS>(TableViewTestDS.class, "test", "", columns, CT_ID.name, SWT.MULTI | SWT.FULL_SELECTION | SWT.VIRTUAL | SWT.CASCADE); tv.initialize(cTV); tv.setRowDefaultHeight(20); tv.addSelectionListener(new TableSelectionListener() { public void selected(TableRowCore[] row) { } public void mouseExit(TableRowCore row) { } public void mouseEnter(TableRowCore row) { } public void focusChanged(TableRowCore focus) { } public void deselected(TableRowCore[] rows) { } public void defaultSelected(TableRowCore[] rows, int stateMask) { System.out.println("Selected " + rows.length); } }, false); //addRows(500); tv.addKeyListener(new KeyListener() { public void keyReleased(KeyEvent e) { } public void keyPressed(KeyEvent e) { if (e.character == SWT.DEL) { List<Object> sources = tv.getSelectedDataSources(); int count = sources.size(); if (count == 0) { return; } int i = tv.getRow((TableViewTestDS) sources.get(count - 1)).getIndex(); if (i >= tv.getRowCount() - 1) { i -= count; } else { i++; } TableRowCore[] newSelRows = i < 0 || i >= tv.getRowCount() ? new TableRowCore[0] : new TableRowCore[] { tv.getRow(i) }; tv.removeDataSources(sources.toArray(new TableViewTestDS[0])); tv.setSelectedRows(newSelRows); } else if (e.keyCode == SWT.INSERT) { TableViewTestDS ds = new TableViewTestDS(); ds.map.put("ID", new Double(3.1)); tv.addDataSource(ds); } } }); UIUpdaterSWT.getInstance().addUpdater(new UIUpdatable() { public void updateUI() { if (pause) { return; } tv.refreshTable(false); } public String getUpdateUIName() { return "tableTest"; } }); Button btnPauseRefresh = new Button(cToggles, SWT.TOGGLE); btnPauseRefresh.setText("Pause Refresh"); btnPauseRefresh.setSelection(pause); btnPauseRefresh.addListener(SWT.Selection, new Listener() { public void handleEvent(Event event) { pause = !pause; } }); Button btnRndChaos = new Button(cToggles, SWT.TOGGLE); btnRndChaos.setText("RndChaos"); btnRndChaos.addListener(SWT.Selection, new Listener() { boolean enabled[] = { false }; public void handleEvent(Event event) { enabled[0] = !enabled[0]; if (enabled[0]) { final cChaos cChaos = new cChaos(enabled); startChaos(cChaos); } } }); Button btnRndChaos1 = new Button(cToggles, SWT.TOGGLE); btnRndChaos1.setText("RndChaos"); btnRndChaos1.addListener(SWT.Selection, new Listener() { boolean enabled[] = { false }; public void handleEvent(Event event) { enabled[0] = !enabled[0]; if (enabled[0]) { final cChaos cChaos = new cChaos(enabled); startChaos(cChaos); } } }); ///////////// Button btnAdd1 = new Button(cBottom, SWT.PUSH); btnAdd1.setText("Add 1"); btnAdd1.addListener(SWT.Selection, new Listener() { public void handleEvent(Event event) { addRows(1); } }); Button btnAdd10 = new Button(cBottom, SWT.PUSH); btnAdd10.setText("Add 10"); btnAdd10.addListener(SWT.Selection, new Listener() { public void handleEvent(Event event) { addRows(10); } }); Button btnAdd100 = new Button(cBottom, SWT.PUSH); btnAdd100.setText("Add 100"); btnAdd100.addListener(SWT.Selection, new Listener() { public void handleEvent(Event event) { addRows(100); } }); Button btnAddX = new Button(cBottom, SWT.PUSH); btnAddX.setText("Add..."); btnAddX.addListener(SWT.Selection, new Listener() { public void handleEvent(Event event) { SimpleTextEntryWindow entryWindow = new SimpleTextEntryWindow("!Add!", "!How Many?"); entryWindow.prompt(new UIInputReceiverListener() { public void UIInputReceiverClosed(UIInputReceiver receiver) { if (receiver.hasSubmittedInput()) { int parseInt = Integer.parseInt(receiver.getSubmittedInput()); addRows(parseInt); } } }); } }); Button btnAddSame = new Button(cBottom, SWT.PUSH); btnAddSame.setText("Add 5 Same + 1"); btnAddSame.addListener(SWT.Selection, new Listener() { public void handleEvent(Event event) { ArrayList<TableViewTestDS> dataSources = tv.getDataSources(); int i = 0; int count = 5; TableViewTestDS[] add = new TableViewTestDS[count + 1]; for (TableViewTestDS ds : dataSources) { add[i++] = ds; if (i >= count) { break; } } add[i] = new TableViewTestDS(); tv.addDataSources(add); } }); Button btnAddSubs = new Button(cBottom, SWT.PUSH); btnAddSubs.setText("Add Subs"); btnAddSubs.setSelection(pause); btnAddSubs.addListener(SWT.Selection, new Listener() { public void handleEvent(Event event) { addSubs(); } }); Button btnClear = new Button(cBottom, SWT.PUSH); btnClear.setText("Clear"); btnClear.setSelection(pause); btnClear.addListener(SWT.Selection, new Listener() { public void handleEvent(Event event) { tv.removeAllTableRows(); } }); Button btnManualRefresh = new Button(cBottom, SWT.PUSH); btnManualRefresh.setText("Manual Refresh"); btnManualRefresh.addListener(SWT.Selection, new Listener() { public void handleEvent(Event event) { tv.refreshTable(false); } }); Button btnRndInsert = new Button(cBottom, SWT.PUSH); btnRndInsert.setText("RndInsert"); btnRndInsert.addListener(SWT.Selection, new Listener() { public void handleEvent(Event event) { rndInsert(1); } }); Button btnRndDel = new Button(cBottom, SWT.PUSH); btnRndDel.setText("RndDel"); btnRndDel.addListener(SWT.Selection, new Listener() { public void handleEvent(Event event) { rndDel(1); } }); Button btnRndDel5 = new Button(cBottom, SWT.PUSH); btnRndDel5.setText("RndDelx5"); btnRndDel5.addListener(SWT.Selection, new Listener() { public void handleEvent(Event event) { rndDel(5); } }); Button btnRndAddDell5 = new Button(cBottom, SWT.PUSH); btnRndAddDell5.setText("RndAddDelx5"); btnRndAddDell5.addListener(SWT.Selection, new Listener() { public void handleEvent(Event event) { rndInsert(5); rndDel(5); } }); shell.open(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) { display.sleep(); } } } /** * * * @since 4.4.0.5 */ protected static void addSubs() { TableRowCore[] selectedRows = tv.getSelectedRows(); for (TableRowCore row : selectedRows) { row.setSubItemCount((int) (Math.random() * 50)); } } /** * @param i * * @since 4.4.0.5 */ private static void addRows(int num) { for (int i = 0; i < num; i++) { tv.addDataSource(new TableViewTestDS()); } } protected static void rndDel(int num) { int size = tv.size(false); if (size <= 0) { return; } TableViewTestDS[] ds = new TableViewTestDS[num]; for (int i = 0; i < ds.length; i++) { int pos = (int) (Math.random() * size); ds[i] = (TableViewTestDS) tv.getRow(pos).getDataSource(true); } tv.removeDataSources(ds); } protected static void rndInsert(int num) { for (int i = 0; i < num; i++) { int size = tv.size(false); double pos = Math.random() * size; TableViewTestDS ds = new TableViewTestDS(); ds.map.put("ID", new Double(pos)); tv.addDataSource(ds); } } protected static void startChaos(final cChaos cChaos) { for (int i = 0; i < 10; i++) { SimpleTimer.addEvent("chaos" + i, SystemTime.getOffsetTime((long) (Math.random() * 3000)), cChaos); } } public static class cChaos implements TimerEventPerformer { private final boolean[] enabled; public cChaos(boolean[] enabled) { this.enabled = enabled; } public void perform(TimerEvent event) { if (!enabled[0]) { return; } if (Math.random() > 0.5) { rndDel(1); } else { rndInsert(1); } SimpleTimer.addEvent("chaos", SystemTime.getOffsetTime((long) (Math.random() * 3000)), this); } } }