/******************************************************************************* * 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.ToolBar; import de.jwic.controls.ToolBarGroup; import de.jwic.controls.actions.Action; import de.jwic.controls.actions.IAction; import de.jwic.controls.dialogs.DialogAdapter; import de.jwic.controls.dialogs.DialogEvent; import de.jwic.controls.menu.Menu; 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.demo.ImageLibrary; import de.jwic.events.ElementSelectedEvent; import de.jwic.events.ElementSelectedListener; import de.jwic.events.SelectionEvent; 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 BasicTBVDemo extends ControlContainer { private static final long serialVersionUID = 2L; private TableViewer viewer; private DemoTaskContentProvider contentProvider; private IAction flagRed; private IAction flagBlue; private IAction deleteTask; private class DemoTableViewerListener implements ElementSelectedListener { public void elementSelected(ElementSelectedEvent event) { if (event.getElement() == null) { refreshActions(null); } else { DemoTask task = contentProvider.getObjectFromKey((String)event.getElement()); if (task != null) { refreshActions(task); if (event.isDblClick()) { getSessionContext().notifyMessage("Element Selected: " + task.title); } } } } } /** * Constructor. * @param container */ public BasicTBVDemo(IControlContainer container) { super(container); // create the viewer viewer = new TableViewer(this, "table"); contentProvider = new DemoTaskContentProvider(createDemoData()); viewer.setContentProvider(contentProvider); viewer.setTableLabelProvider(new LabelProvider()); viewer.setScrollable(true); viewer.setShowStatusBar(true); viewer.setResizeableColumns(true); viewer.setSelectableColumns(true); viewer.setWidth(700); viewer.setHeight(250); TableModel model = viewer.getModel(); model.setMaxLines(50); // all DemoTableViewerListener listener = new DemoTableViewerListener(); // add listener to demonstrate sorting/images model.addTableModelListener(new TableModelAdapter() { public void columnSelected(TableModelEvent event) { handleSorting(event.getTableColumn()); } }); model.setSelectionMode(TableModel.SELECTION_SINGLE); createColumns(); // create Actions createActions(); // create the toolbar ToolBar tb = new ToolBar(this, "toolbar"); tb.setCssClass("j-toolbar ui-corner-top"); ToolBarGroup group = tb.addGroup(); Button btNew = group.addButton(); btNew.setTitle("Add Task"); btNew.setIconEnabled(ImageLibrary.IMG_ADD); btNew.addSelectionListener(new SelectionListener() { @Override public void objectSelected(SelectionEvent event) { addDemoTask(); } }); group.addAction(deleteTask); group.addAction(flagBlue); group.addAction(flagRed); // Add a context menu Menu menu = new Menu(this, "contextMenu"); menu.addMenuItem(flagRed); menu.addMenuItem(flagBlue); menu.addMenuItem(deleteTask); viewer.setMenu(menu); // Add the listener after all other controls have been created model.addElementSelectedListener(listener); } /** * */ protected void addDemoTask() { AddDemoTaskDialog dialog = new AddDemoTaskDialog(viewer.getContainer()); dialog.addDialogListener(new DialogAdapter() { public void dialogFinished(DialogEvent event) { AddDemoTaskDialog dialog = ((AddDemoTaskDialog) event.getEventSource()); DemoTask task = dialog.getDemoTask(); contentProvider.addElement(task); viewer.setRequireRedraw(true); } }); dialog.openAsPage(); } /** * @param task */ public void refreshActions(DemoTask task) { deleteTask.setEnabled(task != null); flagBlue.setEnabled(task != null); flagRed.setEnabled(task != null && !task.done); } /** * */ private void createActions() { flagRed = new Action() { @Override public void run() { handleFlagRed(); } }; flagRed.setTitle("Mark Completed"); flagRed.setIconEnabled(new ImageRef("icons/flag_red.png")); flagBlue = new Action() { @Override public void run() { handleFlagBlue(); } }; flagBlue.setTitle("Mark for Review"); flagBlue.setIconEnabled(new ImageRef("icons/flag_blue.png")); deleteTask = new Action() { public void run() { getSessionContext().notifyMessage("Sorry, not implemented", "error"); } }; deleteTask.setTitle("Delete"); deleteTask.setIconEnabled(ImageLibrary.IMG_CROSS); refreshActions(null); } /** * */ protected void handleFlagBlue() { String key = viewer.getModel().getFirstSelectedKey(); if (key != null) { DemoTask task = contentProvider.getObjectFromKey(key); getSessionContext().notifyMessage("Task '" + task.title + "' marked for review.", "info"); } } /** * */ protected void handleFlagRed() { String key = viewer.getModel().getFirstSelectedKey(); if (key != null) { DemoTask task = contentProvider.getObjectFromKey(key); if (task != null) { task.completed = 100; task.done = true; viewer.requireRedraw(); } } } /** * 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; } }