package org.erlide.tracing.core.mvc.controller; import org.eclipse.jface.viewers.ICellModifier; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.swt.widgets.TableItem; import org.erlide.tracing.core.ProcessFlag; import org.erlide.tracing.core.mvc.model.TracedProcess; import org.erlide.tracing.core.mvc.view.ProcessColumn; /** * Cell modifier for processes table. * * @author Piotr Dorobisz * */ public class ProcessCellModifier implements ICellModifier { private final TableViewer tableViewer; public ProcessCellModifier(final TableViewer tableViewer) { this.tableViewer = tableViewer; } @Override public boolean canModify(final Object element, final String property) { // when cell from processes column was clicked try { final ProcessColumn column = ProcessColumn.valueOf(property); // only column with checkbox can be modified if (!ProcessColumn.SELECTED.equals(column)) { return false; } } catch (final Exception e) { } // when cell from flag column was clicked return true; } @Override public Object getValue(final Object element, final String property) { final TracedProcess process = (TracedProcess) element; try { switch (ProcessColumn.valueOf(property)) { case INITIAL_CALL: return process.getInitialCall(); case NAME: return process.getName(); case SELECTED: return process.isSelected(); default: } } catch (final Exception e) { } return process.hasFlag(ProcessFlag.valueOf(property)); } @Override public void modify(final Object element, final String property, final Object value) { final TracedProcess process = (TracedProcess) ((TableItem) element).getData(); // processes column try { if (ProcessColumn.SELECTED.equals(ProcessColumn.valueOf(property))) { process.setSelected((Boolean) value); tableViewer.update(process, null); } return; } catch (final Exception e) { } // flag column final ProcessFlag flag = ProcessFlag.valueOf(property); if ((Boolean) value) { process.setFlag(flag); } else { process.unSetFlag(flag); } tableViewer.update(process, null); } }