/******************************************************************************* * Copyright 2015 xWic group (http://www.xwic.de) * * Licensed under the Apache License, Version 2.0 (the "License"). * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * *******************************************************************************/ package de.jwic.demo.tbv; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import de.jwic.base.ControlContainer; import de.jwic.base.IControlContainer; import de.jwic.base.ImageRef; import de.jwic.controls.Button; import de.jwic.controls.InputBox; import de.jwic.controls.LabelControl; import de.jwic.controls.ListBoxControl; import de.jwic.controls.tableviewer.DefaultTableRenderer; import de.jwic.controls.tableviewer.FixColumnTableRenderer; import de.jwic.controls.tableviewer.TableColumn; import de.jwic.controls.tableviewer.TableModel; import de.jwic.controls.tableviewer.TableModelAdapter; import de.jwic.controls.tableviewer.TableModelEvent; import de.jwic.controls.tableviewer.TableViewer; import de.jwic.events.ElementSelectedEvent; import de.jwic.events.ElementSelectedListener; import de.jwic.events.KeyEvent; import de.jwic.events.KeyListener; import de.jwic.events.SelectionListener; /** * TableViewer Demo. This class contains a few inner classes that would usualy * be implemented as "normal" classes. This is done to enhance reading the demo * code on the website. * * @author Florian Lippisch */ public class TableViewerDemo extends ControlContainer { private static final long serialVersionUID = 2L; private ListBoxControl lbcEvents = null; private Button btFillWidth; private Button btEnabled; private TableViewer viewer; private DemoTaskContentProvider contentProvider; private class DemoTableViewerListener extends TableModelAdapter implements ElementSelectedListener { public void rangeUpdated(TableModelEvent event) { lbcEvents.addElement("rangeUpdated()"); } public void elementSelected(ElementSelectedEvent event) { lbcEvents.addElement("elementSelected(" + event.getElement() + ") " + (event.isDblClick() ? "DBLCLICK" : "")); } public void columnSelected(TableModelEvent event) { lbcEvents.addElement("columnSelected(" + event.getTableColumn().getTitle() + ")"); } public void nodeCollapsed(TableModelEvent event) { lbcEvents.addElement("nodeCollapsed(" + event.getRowKey()+ ")"); } public void nodeExpanded(TableModelEvent event) { lbcEvents.addElement("nodeExpanded(" + event.getRowKey()+ ")"); } public void columnResized(TableModelEvent event) { lbcEvents.addElement("columnResized(" + event.getTableColumn().getTitle() + ")"); } } /** * Constructor. * @param container */ public TableViewerDemo(IControlContainer container) { super(container); lbcEvents = new ListBoxControl(this, "events"); lbcEvents.setSize(10); lbcEvents.setWidth(500); viewer = new TableViewer(this, "table"); contentProvider = new DemoTaskContentProvider(createDemoData()); viewer.setContentProvider(contentProvider); viewer.setTableLabelProvider(new LabelProvider()); viewer.setScrollable(true); viewer.setShowStatusBar(false); viewer.setResizeableColumns(true); viewer.setSelectableColumns(true); viewer.setWidth(400); viewer.setHeight(200); TableModel model = viewer.getModel(); model.setMaxLines(-1); // all DemoTableViewerListener listener = new DemoTableViewerListener(); model.addTableModelListener(listener); model.addElementSelectedListener(listener); // add listener to demonstrate sorting/images model.addTableModelListener(new TableModelAdapter() { public void columnSelected(TableModelEvent event) { handleSorting(event.getTableColumn()); } }); model.setSelectionMode(TableModel.SELECTION_SINGLE); createColumns(); /* * Add controls to modify TableViewer properties. */ ListBoxControl lbClass = new ListBoxControl(this, "lbClass"); lbClass.addElement("tblViewer (default)", "tblViewer"); lbClass.addElement("tblVFlat"); lbClass.setSelectedKey("tblViewer"); lbClass.setChangeNotification(true); lbClass.addElementSelectedListener(new ElementSelectedListener() { public void elementSelected(ElementSelectedEvent event) { viewer.setCssClass((String)event.getElement()); }; }); // Change Listbox Width ListBoxControl lbMaxLines = new ListBoxControl(this, "lbMaxLines"); lbMaxLines.addElement("-1 (All)", "-1"); for (int i = 5; i < 101; i += 5) { lbMaxLines.addElement(Integer.toString(i) + " lines", Integer.toString(i)); } lbMaxLines.setSelectedKey(Integer.toString(viewer.getModel().getMaxLines())); lbMaxLines.setChangeNotification(true); lbMaxLines.addElementSelectedListener(new ElementSelectedListener() { public void elementSelected(ElementSelectedEvent event) { viewer.getModel().setMaxLines((Integer.parseInt((String)event.getElement()))); }; }); // Change Status Bar property ListBoxControl lbStatusBar = new ListBoxControl(this, "lbStatusBar"); lbStatusBar.addElement("True", "true"); lbStatusBar.addElement("False", "false"); lbStatusBar.setSelectedKey(viewer.isShowStatusBar() ? "true" : "false"); lbStatusBar.setChangeNotification(true); lbStatusBar.addElementSelectedListener(new ElementSelectedListener() { public void elementSelected(ElementSelectedEvent event) { viewer.setShowStatusBar(event.getElement().equals("true")); }; }); // Change ResizeableColumn property ListBoxControl lbResCol = new ListBoxControl(this, "lbResCol"); lbResCol.addElement("True", "true"); lbResCol.addElement("False", "false"); lbResCol.setSelectedKey(viewer.isResizeableColumns() ? "true" : "false"); lbResCol.setChangeNotification(true); lbResCol.addElementSelectedListener(new ElementSelectedListener() { public void elementSelected(ElementSelectedEvent event) { viewer.setResizeableColumns(event.getElement().equals("true")); }; }); // Change ResizeableColumn property ListBoxControl lbSelCol = new ListBoxControl(this, "lbSelCol"); lbSelCol.addElement("True", "true"); lbSelCol.addElement("False", "false"); lbSelCol.setSelectedKey(viewer.isSelectableColumns() ? "true" : "false"); lbSelCol.setChangeNotification(true); lbSelCol.addElementSelectedListener(new ElementSelectedListener() { public void elementSelected(ElementSelectedEvent event) { viewer.setSelectableColumns(event.getElement().equals("true")); }; }); // Change ResizeableColumn property ListBoxControl lbScrollable = new ListBoxControl(this, "lbScrollable"); lbScrollable.addElement("True", "true"); lbScrollable.addElement("False", "false"); lbScrollable.setSelectedKey(viewer.isScrollable() ? "true" : "false"); lbScrollable.setChangeNotification(true); lbScrollable.addElementSelectedListener(new ElementSelectedListener() { public void elementSelected(ElementSelectedEvent event) { viewer.setScrollable(event.getElement().equals("true")); }; }); // Change Listbox Width ListBoxControl lbWidth = new ListBoxControl(this, "lbWidth"); lbWidth.addElement("0 - Unspecified", "0"); for (int i = 200; i < 601; i += 50) { lbWidth.addElement(Integer.toString(i) + "px", Integer.toString(i)); } lbWidth.setSelectedKey(Integer.toString(viewer.getWidth())); lbWidth.setChangeNotification(true); lbWidth.addElementSelectedListener(new ElementSelectedListener() { public void elementSelected(ElementSelectedEvent event) { viewer.setWidth(Integer.parseInt((String)event.getElement())); }; }); // Change Listbox Height ListBoxControl lbHeight = new ListBoxControl(this, "lbHeight"); lbHeight.addElement("0 - Unspecified", "0"); for (int i = 50; i < 401; i += 50) { lbHeight.addElement(Integer.toString(i) + "px", Integer.toString(i)); } lbHeight.setSelectedKey(Integer.toString(viewer.getHeight())); lbHeight.setChangeNotification(true); lbHeight.addElementSelectedListener(new ElementSelectedListener() { public void elementSelected(ElementSelectedEvent event) { viewer.setHeight(Integer.parseInt((String)event.getElement())); }; }); // Change Listbox Width ListBoxControl lbVisible = new ListBoxControl(this, "btVisible"); lbVisible.addElement("True", "true"); lbVisible.addElement("False", "false"); lbVisible.setSelectedKey(viewer.isVisible() ? "true" : "false"); lbVisible.setChangeNotification(true); lbVisible.addElementSelectedListener(new ElementSelectedListener() { public void elementSelected(ElementSelectedEvent event) { viewer.setVisible(event.getElement().equals("true")); }; }); // Change Listbox Width ListBoxControl lbSelMode = new ListBoxControl(this, "lbSelMode"); lbSelMode.addElement("SELECTION_NONE", "0"); lbSelMode.addElement("SELECTION_SINGLE", "1"); lbSelMode.addElement("SELECTION_MULTI", "2"); lbSelMode.setSelectedKey(Integer.toString(viewer.getModel().getSelectionMode())); lbSelMode.setChangeNotification(true); lbSelMode.addElementSelectedListener(new ElementSelectedListener() { public void elementSelected(ElementSelectedEvent event) { viewer.getModel().setSelectionMode(Integer.parseInt((String)event.getElement())); viewer.setRequireRedraw(true); }; }); btEnabled = new Button(this, "btEnabled"); btEnabled.setTitle(viewer.isEnabled() ? "Disable" : "Enable"); btEnabled.addSelectionListener(new SelectionListener() { public void objectSelected(de.jwic.events.SelectionEvent event) { changeEnabled(); }; }); btFillWidth = new Button(this, "btFillWidth"); btFillWidth.setTitle(viewer.isFillWidth() ? "Disable" : "Enable"); btFillWidth.addSelectionListener(new SelectionListener() { public void objectSelected(de.jwic.events.SelectionEvent event) { changeFillWidth(); }; }); ListBoxControl lbSelRenderer = new ListBoxControl(this, "lbSelRenderer"); lbSelRenderer.addElement("DefaultTableRenderer", "0"); lbSelRenderer.addElement("FixColumnTableRenderer", "1"); lbSelRenderer.setSelectedKey("0"); lbSelRenderer.setChangeNotification(true); final DefaultTableRenderer defaultRenderer = new DefaultTableRenderer(); final FixColumnTableRenderer fixColumnRenderer = new FixColumnTableRenderer(); final LabelControl lblRenderer = new LabelControl(this, "lblRenderer"); final InputBox inpRenderer = new InputBox(this, "inpRenderer"); lblRenderer.setVisible(false); inpRenderer.setVisible(false); inpRenderer.setText("0"); lblRenderer.setText("Fix column position"); lbSelRenderer.addElementSelectedListener(new ElementSelectedListener() { public void elementSelected(ElementSelectedEvent event) { if (event.getElement().equals("1")) { viewer.setTableRenderer(fixColumnRenderer); lblRenderer.setVisible(true); inpRenderer.setVisible(true); } else if (event.getElement().equals("0")) { viewer.setTableRenderer(defaultRenderer); lblRenderer.setVisible(false); inpRenderer.setVisible(false); } viewer.setRequireRedraw(true); } }); inpRenderer.setListenKeyCode(13); inpRenderer.addKeyListener(new KeyListener() { public void keyPressed(KeyEvent event) { fixColumnRenderer.setFixColumn(Integer.parseInt(inpRenderer.getText())); viewer.setRequireRedraw(true); } }); } /** * Change the sort icon. * @param tableColumn */ protected void handleSorting(TableColumn tableColumn) { if (tableColumn.getSortIcon() == TableColumn.SORT_ICON_NONE) { // clear all columns for (Iterator<TableColumn> it = viewer.getModel().getColumnIterator(); it.hasNext(); ) { TableColumn col = it.next(); col.setSortIcon(TableColumn.SORT_ICON_NONE); } } boolean up = true; switch (tableColumn.getSortIcon()) { case TableColumn.SORT_ICON_NONE: tableColumn.setSortIcon(TableColumn.SORT_ICON_UP); break; case TableColumn.SORT_ICON_UP: tableColumn.setSortIcon(TableColumn.SORT_ICON_DOWN); up = false; break; case TableColumn.SORT_ICON_DOWN: // once sorted, the list can not be displayed in the // original order as we sort the original table, // therefor loosing the original order. tableColumn.setSortIcon(TableColumn.SORT_ICON_UP); //tableColumn.setSortIcon(TableColumn.SORT_ICON_NONE); break; } // do the sort contentProvider.sortData((String)tableColumn.getUserObject(), up); viewer.setRequireRedraw(true); } /** * */ private void createColumns() { TableModel model = viewer.getModel(); // add Columns TableColumn col = new TableColumn(""); col.setImage(new ImageRef(getClass().getPackage(), "checked.gif")); col.setWidth(20); col.setUserObject("done"); model.addColumn(col); col = new TableColumn("Task"); col.setUserObject("title"); col.setWidth(250); model.addColumn(col); col = new TableColumn("Owner"); col.setUserObject("owner"); col.setWidth(120); model.addColumn(col); col = new TableColumn("Complete"); col.setUserObject("completed"); col.setWidth(80); model.addColumn(col); } /** * @return */ private List<DemoTask> createDemoData() { List<DemoTask> data = new ArrayList<DemoTask>(); data.add(new DemoTask("Implement Demo", "Sam", 0)); DemoTask task = new DemoTask("Write Docu", "Mark", 0); task.done = true; data.add(task); data.add(new DemoTask("Setup buildserver", "Ronny", 20)); data.add(new DemoTask("Update jwic homepage", "?", 0)); data.add(new DemoTask("Unknown", "", 0)); data.add(new DemoTask("Change default implementation", "Sam", 10)); data.add(new DemoTask("Evaluate library XYZ for relevance", "Mark", 50)); for (int i = 1; i < 105; i++) { DemoTask demoTask = new DemoTask(); demoTask.done = i % 5 == 0; demoTask.completed = i; demoTask.title = "Task " + i; demoTask.owner = "?"; data.add(demoTask); } return data; } /** * Change between multiple and single selection. */ protected void changeFillWidth() { viewer.setFillWidth(!viewer.isFillWidth()); btFillWidth.setTitle(viewer.isFillWidth() ? "Disable" : "Enable"); } /** * Change the Enabled property of the button. */ protected void changeEnabled() { viewer.setEnabled(!viewer.isEnabled()); btEnabled.setTitle(viewer.isEnabled() ? "Disable" : "Enable"); } }