All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.fosstrak.llrp.commander.views.TableViewPart Maven / Gradle / Ivy

/*
 *  
 *  Fosstrak LLRP Commander (www.fosstrak.org)
 * 
 *  Copyright (C) 2008 ETH Zurich
 *
 *  This program is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program.  If not, see  
 *
 */

package org.fosstrak.llrp.commander.views;

import org.apache.log4j.Logger;
import org.eclipse.jface.action.*;
import org.eclipse.jface.viewers.*;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.*;
import org.eclipse.ui.*;
import org.eclipse.ui.part.ViewPart;


/**
* Prepares the ViewPart for the table viewer.
* @author zhanghao
*
*/
public class TableViewPart extends ViewPart {

	/**
	 * Log4j instance.
	 */
	private static Logger log = Logger.getLogger(TableViewPart.class);
	
	protected static final String TAG_COLUMN = "column";
	protected static final String TAG_NUMBER = "number";
	protected static final String TAG_WIDTH = "width";

	private String columnHeaders[];
	private ColumnLayoutData columnLayouts[];
	private IAction doubleClickAction;
	private IMemento memento;

	private Table table;
	private TableViewer viewer;

	public void createPartControl(Composite parent) {
		viewer = new TableViewer(parent, SWT.SINGLE | SWT.FULL_SELECTION
				| SWT.H_SCROLL | SWT.V_SCROLL);

		table = viewer.getTable();
		table.setHeaderVisible(true);
		table.setLinesVisible(true);

		createColumns();
		createActions();
		hookMenus();
		hookEvents();
		contributeToActionBars();
	}

	protected void createColumns() {
		if (memento != null) {
			restoreColumnWidths(memento);
		}

		TableLayout layout = new TableLayout();
		table.setLayout(layout);

		for (int i = 0; i < columnHeaders.length; i++) {
			TableColumn tc = new TableColumn(table, SWT.NONE, i);
			
			log.debug("Creating Column " + columnHeaders[i]);
			
			tc.setText(columnHeaders[i]);
			tc.setResizable(columnLayouts[i].resizable);
			layout.addColumnData(columnLayouts[i]);
		}
		
		//table.pack();
	}

	protected void restoreColumnWidths(IMemento memento) {
		IMemento children[] = memento.getChildren(TAG_COLUMN);
		if (children != null) {
			for (int i = 0; i < children.length; i++) {
				Integer val = children[i].getInteger(TAG_NUMBER);
				if (val != null) {
					int index = val.intValue();
					val = children[i].getInteger(TAG_WIDTH);
					if (val != null) {
						columnLayouts[index] = new ColumnPixelData(val
								.intValue(), true);
					}
				}
			}
		}
	}

	protected void saveColumnWidths(IMemento memento) {
		Table table = viewer.getTable();
		TableColumn columns[] = table.getColumns();

		for (int i = 0; i < columns.length; i++) {
			if (columnLayouts[i].resizable) {
				IMemento child = memento.createChild(TAG_COLUMN);
				child.putInteger(TAG_NUMBER, i);
				child.putInteger(TAG_WIDTH, columns[i].getWidth());
			}
		}
	}

	protected void hookMenus() {
		MenuManager menuMgr = new MenuManager("#PopupMenu");
		menuMgr.setRemoveAllWhenShown(true);
		menuMgr.addMenuListener(new IMenuListener() {
			public void menuAboutToShow(IMenuManager manager) {
				TableViewPart.this.fillContextMenu(manager);
			}
		});
		Menu menu = menuMgr.createContextMenu(viewer.getControl());
		viewer.getControl().setMenu(menu);
		getSite().registerContextMenu(menuMgr, viewer);
	}

	protected void hookEvents() {
		viewer.addSelectionChangedListener(new ISelectionChangedListener() {
			public void selectionChanged(SelectionChangedEvent event) {
				if (event.getSelection() != null)
					TableViewPart.this.selectionChanged(event);
			}
		});
		viewer.addDoubleClickListener(new IDoubleClickListener() {
			public void doubleClick(DoubleClickEvent event) {
				try {
					doubleClickAction.run();
				} catch (Exception e) {
					
				}
			}
		});
	}

	protected void contributeToActionBars() {
		IActionBars bars = getViewSite().getActionBars();
		fillLocalPullDown(bars.getMenuManager());
		fillLocalToolBar(bars.getToolBarManager());
	}

	public void saveState(IMemento memento) {
		if (viewer == null) {
			if (this.memento != null) // Keep the old state;
				memento.putMemento(this.memento);
			return;
		}

		saveColumnWidths(memento);
	}

	public void init(IViewSite site, IMemento memento) throws PartInitException {
		super.init(site, memento);
		this.memento = memento;
	}

	public void setFocus() {
		viewer.getControl().setFocus();
	}

	public Table getTable() {
		return table;
	}

	public TableViewer getViewer() {
		return viewer;
	}

	public void setColumnHeaders(String[] strings) {
		columnHeaders = strings;
	}

	public void setColumnLayouts(ColumnLayoutData[] data) {
		columnLayouts = data;
	}

	public void setDoubleClickAction(IAction action) {
		doubleClickAction = action;
	}

	protected void fillContextMenu(IMenuManager manager) {
	}

	protected void fillLocalPullDown(IMenuManager manager) {
	}

	protected void fillLocalToolBar(IToolBarManager manager) {
	}

	protected void selectionChanged(SelectionChangedEvent event) {
	}

	protected void createActions() {
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy