package com.vuze.tests.swt.tableview;
import java.util.List;
import java.util.ResourceBundle;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.KeyEvent;
import org.eclipse.swt.events.KeyListener;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.widgets.*;
import org.gudy.azureus2.core3.config.COConfigurationManager;
import org.gudy.azureus2.core3.internat.MessageText;
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.TableViewSWT;
import org.gudy.azureus2.ui.swt.views.table.TableViewSWTMenuFillListener;
import org.gudy.azureus2.ui.swt.views.table.impl.TableViewFactory;
import org.gudy.azureus2.ui.swt.views.table.painted.TableViewPainted;
import com.aelitis.azureus.ui.common.table.*;
import com.aelitis.azureus.ui.common.table.impl.TableColumnManager;
import com.aelitis.azureus.ui.common.updater.UIUpdatable;
import com.aelitis.azureus.ui.swt.columns.utils.TableColumnCreatorV3;
import com.aelitis.azureus.ui.swt.uiupdater.UIUpdaterSWT;
public class testTableView
{
private static TableViewSWT tv;
private static boolean pause = true;
private static boolean printDiff;
private static int numChaos = 6;
private static Thread[] chaosThreads;
@SuppressWarnings({
"unchecked",
"rawtypes"
})
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();
ResourceBundle bundle = ResourceBundle.getBundle("com.vuze.tests.swt.tableview.text");
MessageText.integratePluginMessages(bundle);
TableColumnCreatorV3.initCoreColumns();
Shell shell = new Shell(display, SWT.SHELL_TRIM);
shell.setText("testTableView");
shell.setSize(800, 400);
FormLayout fl = new FormLayout();
shell.setLayout(fl);
Composite cTop = new Composite(shell, SWT.BORDER);
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 = null;
cTop.setLayoutData(fd);
fd = Utils.getFilledFormData();
fd.top = new FormAttachment(cTop, 5);
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_Text(),
new CT_InvalidOnly(),
new CT_Live(),
new CT_LivePaintOnly(),
new CT_LivePaintOnlyExt(),
new CT_LiveExt(),
new CT_InvOnlyExt(),
new CT_InvOnlyReord(),
};
TableColumnManager tcm = com.aelitis.azureus.ui.common.table.impl.TableColumnManager.getInstance();
tcm.addColumns(columns);
String names[] = new String[columns.length];
for (int i = 0; i < columns.length; i++) {
TableColumnCore c = columns[i];
names[i] = c.getName();
}
tcm.setDefaultColumnNames("test", names);
tv = TableViewFactory.createTableViewSWT(true, TableViewTestDS.class,
"test", "", columns, CT_ID.name, SWT.MULTI | SWT.FULL_SELECTION
| SWT.VIRTUAL | SWT.CASCADE);
tv.initialize(cTV);
tv.setRowDefaultHeight(40);
// tv.setRowDefaultHeight(16);
tv.addCountChangeListener(new TableCountChangeListener() {
public void rowRemoved(TableRowCore row) {
}
public void rowAdded(TableRowCore row) {
//row.setHeight((int) (16 + (Math.random() * 100)));
}
});
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.keyCode == SWT.DEL) {
System.out.println("SMURF");
List<Object> sources = tv.getSelectedDataSources();
int count = sources.size();
if (count == 0) {
return;
}
tv.removeDataSources(sources.toArray());
// 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);
}
}
});
tv.addMenuFillListener(new TableViewSWTMenuFillListener() {
public void fillMenu(String sColumnName, Menu menu) {
MenuItem menuItem = new MenuItem(menu, SWT.PUSH);
menuItem.setText("MenuFrom fillMenu");
}
public void addThisColumnSubMenu(String sColumnName, Menu menuThisColumn) {
MenuItem menuItem = new MenuItem(menuThisColumn, SWT.PUSH);
menuItem.setText("MenuFrom addThisColumnSubMenu");
}
});
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;
/*
SimpleTimer.addEvent("YourKitS", SystemTime.getOffsetTime(1000l * 9),
new TimerEventPerformer() {
public void perform(TimerEvent event) {
try {
Controller controller;
controller = new Controller();
System.out.println("STARTING");
controller.startCPUProfiling(ProfilingModes.CPU_TRACING,
Controller.DEFAULT_FILTERS,
Controller.DEFAULT_WALLTIME_SPEC);
System.out.println("STARTED");
SimpleTimer.addEvent("YourKitE",
SystemTime.getOffsetTime(1000l * 60),
new TimerEventPerformer() {
public void perform(TimerEvent event) {
try {
Controller controller;
controller = new Controller();
controller.stopCPUProfiling();
System.out.println("STOPPED");
} catch (Exception e) {
e.printStackTrace();
}
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
});
*/
}
});
chaosThreads = new Thread[numChaos];
for (int i = 0; i < numChaos; i++) {
final boolean[] enabled = { false };
final Thread thread = chaosThreads[i] = new Thread("Chaos " + i) {
public void run() {
while (!enabled[0]) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
while (enabled[0]) {
if (Math.random() > 0.5) {
rndDel((int) (Math.random() * 100));
} else {
rndInsert((int) (Math.random() * 100));
}
if (!enabled[0]) {
break;
}
long sleepFor = (long) (Math.random() * 200);
try {
Thread.sleep(sleepFor);
} catch (InterruptedException e) {
}
}
}
};
thread.setDaemon(true);
thread.start();
final Button btnRndChaos = new Button(cToggles, SWT.TOGGLE);
btnRndChaos.setText("RndChaos " + i);
btnRndChaos.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
enabled[0] = btnRndChaos.getSelection();
}
});
}
/////////////
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()) {
final int parseInt = Integer.parseInt(receiver.getSubmittedInput());
Utils.getOffOfSWTThread(new AERunnable() {
public void runSupport() {
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) {
List<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 to Selected");
btnAddSubs.setSelection(pause);
btnAddSubs.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
addSubs(-1);
}
});
Button btnAddXSubs = new Button(cBottom, SWT.PUSH);
btnAddXSubs.setText("Add Subs...");
btnAddXSubs.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
SimpleTextEntryWindow entryWindow = new SimpleTextEntryWindow("!Add Subs!",
"!How Many?!");
entryWindow.prompt(new UIInputReceiverListener() {
public void UIInputReceiverClosed(UIInputReceiver receiver) {
if (receiver.hasSubmittedInput()) {
int parseInt = Integer.parseInt(receiver.getSubmittedInput());
addSubs(parseInt);
}
}
});
}
});
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 btnRedraw = new Button(cBottom, SWT.PUSH);
btnRedraw.setText("redraw");
btnRedraw.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
Composite composite = tv.getComposite();
Rectangle ca = composite.getClientArea();
composite.redraw(ca.x, ca.y, ca.width, ca.height, true);
composite.update();
}
});
Button btnRedraw1 = new Button(cBottom, SWT.PUSH);
btnRedraw1.setText("redraw1");
btnRedraw1.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
((TableViewPainted) tv).swt_updateCanvasImage(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);
}
});
Button chkPrintDiff = new Button(cBottom, SWT.CHECK);
chkPrintDiff.setText("PrintDiff");
chkPrintDiff.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
printDiff = !printDiff;
}
});
//////////////////
cTop.setLayout(new FillLayout());
Text txtFilter = new Text(cTop, SWT.BORDER);
tv.enableFilterCheck(txtFilter, new TableViewFilterCheck() {
public void filterSet(String filter) {
System.out.println("Filter set to " + filter.length() + "; " + filter);
}
public boolean filterCheck(Object ds, String filter, boolean regex) {
if (filter == null || filter.length() == 0) {
return true;
}
if (ds instanceof TableViewTestDS) {
TableViewTestDS tds = (TableViewTestDS) ds;
String s = (String) tds.map.get("text");
if (s == null || s.length() == 0) {
System.out.println("BURP");
return true;
}
return s.contains(filter);
}
return true;
}
});
//////////////////
shell.open();
while (!shell.isDisposed()) {
try {
long last = System.currentTimeMillis();
while (!display.isDisposed() && display.readAndDispatch())
;
if (display.isDisposed()) {
return;
}
long now = System.currentTimeMillis();
long diff = now - last;
last = now;
if (diff > 1 && printDiff) {
System.out.println(diff);
}
display.sleep();
} catch (Throwable t) {
t.printStackTrace();
}
}
}
protected static void addSubs(int num) {
TableRowCore[] selectedRows = tv.getSelectedRows();
for (TableRowCore row : selectedRows) {
if (num < 0) {
num = (int) (Math.random() * (-num));
}
//row.setSubItemCount(num);
TableViewTestDS[] subitems = new TableViewTestDS[num];
for (int i = 0; i < num; i++) {
TableViewTestDS ds = new TableViewTestDS();
ds.map.put("ID", new Double(i));
subitems[i] = ds;
}
row.setSubItems(subitems);
row.setExpanded(true);
}
}
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);
TableRowCore row = tv.getRowQuick(pos);
if (row != null) {
ds[i] = (TableViewTestDS) row.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);
}
}
}