2015-10-22 00:25:12 +02:00
|
|
|
/*******************************************************************************
|
|
|
|
* Copyright (c) 2015 MINRES Technologies GmbH and others.
|
|
|
|
* All rights reserved. This program and the accompanying materials
|
|
|
|
* are made available under the terms of the Eclipse Public License v1.0
|
|
|
|
* which accompanies this distribution, and is available at
|
|
|
|
* http://www.eclipse.org/legal/epl-v10.html
|
|
|
|
*
|
|
|
|
* Contributors:
|
|
|
|
* MINRES Technologies GmbH - initial API and implementation
|
|
|
|
*******************************************************************************/
|
2015-10-22 00:05:29 +02:00
|
|
|
package com.minres.scviewer.e4.application.parts;
|
|
|
|
|
|
|
|
import java.beans.PropertyChangeEvent;
|
|
|
|
import java.beans.PropertyChangeListener;
|
2015-11-15 22:15:37 +01:00
|
|
|
import java.lang.annotation.Annotation;
|
2015-10-22 00:05:29 +02:00
|
|
|
import java.util.Arrays;
|
|
|
|
import java.util.List;
|
|
|
|
|
|
|
|
import javax.annotation.PostConstruct;
|
|
|
|
import javax.inject.Inject;
|
2015-11-15 22:15:37 +01:00
|
|
|
import javax.inject.Named;
|
2015-10-22 00:05:29 +02:00
|
|
|
|
2015-11-15 22:15:37 +01:00
|
|
|
import org.eclipse.e4.core.contexts.ContextInjectionFactory;
|
|
|
|
import org.eclipse.e4.core.contexts.IEclipseContext;
|
|
|
|
import org.eclipse.e4.core.di.annotations.CanExecute;
|
|
|
|
import org.eclipse.e4.core.di.annotations.Execute;
|
2015-10-22 00:05:29 +02:00
|
|
|
import org.eclipse.e4.core.di.annotations.Optional;
|
|
|
|
import org.eclipse.e4.core.services.events.IEventBroker;
|
|
|
|
import org.eclipse.e4.ui.di.Focus;
|
|
|
|
import org.eclipse.e4.ui.di.UIEventTopic;
|
2015-11-15 22:15:37 +01:00
|
|
|
import org.eclipse.e4.ui.model.application.ui.basic.MPart;
|
|
|
|
import org.eclipse.e4.ui.services.EMenuService;
|
|
|
|
import org.eclipse.e4.ui.services.IServiceConstants;
|
|
|
|
import org.eclipse.e4.ui.workbench.modeling.EPartService;
|
2015-10-22 00:05:29 +02:00
|
|
|
import org.eclipse.e4.ui.workbench.modeling.ESelectionService;
|
2015-11-15 22:15:37 +01:00
|
|
|
import org.eclipse.jface.viewers.DoubleClickEvent;
|
|
|
|
import org.eclipse.jface.viewers.IDoubleClickListener;
|
|
|
|
import org.eclipse.jface.viewers.ISelection;
|
2015-10-22 00:05:29 +02:00
|
|
|
import org.eclipse.jface.viewers.ISelectionChangedListener;
|
2015-11-15 22:15:37 +01:00
|
|
|
import org.eclipse.jface.viewers.IStructuredContentProvider;
|
|
|
|
import org.eclipse.jface.viewers.IStructuredSelection;
|
2015-10-22 00:05:29 +02:00
|
|
|
import org.eclipse.jface.viewers.SelectionChangedEvent;
|
2015-11-15 22:15:37 +01:00
|
|
|
import org.eclipse.jface.viewers.StructuredSelection;
|
|
|
|
import org.eclipse.jface.viewers.TableViewer;
|
2015-10-22 00:05:29 +02:00
|
|
|
import org.eclipse.jface.viewers.TreeViewer;
|
2015-11-15 22:15:37 +01:00
|
|
|
import org.eclipse.jface.viewers.Viewer;
|
|
|
|
import org.eclipse.jface.viewers.ViewerFilter;
|
2015-10-22 00:05:29 +02:00
|
|
|
import org.eclipse.swt.SWT;
|
2015-11-15 22:15:37 +01:00
|
|
|
import org.eclipse.swt.custom.SashForm;
|
|
|
|
import org.eclipse.swt.events.ControlAdapter;
|
|
|
|
import org.eclipse.swt.events.ControlEvent;
|
|
|
|
import org.eclipse.swt.events.ModifyEvent;
|
|
|
|
import org.eclipse.swt.events.ModifyListener;
|
|
|
|
import org.eclipse.swt.events.PaintEvent;
|
|
|
|
import org.eclipse.swt.events.PaintListener;
|
|
|
|
import org.eclipse.swt.events.SelectionAdapter;
|
|
|
|
import org.eclipse.swt.events.SelectionEvent;
|
2015-10-22 00:05:29 +02:00
|
|
|
import org.eclipse.swt.layout.GridData;
|
|
|
|
import org.eclipse.swt.layout.GridLayout;
|
|
|
|
import org.eclipse.swt.widgets.Composite;
|
2015-11-15 22:15:37 +01:00
|
|
|
import org.eclipse.swt.widgets.Text;
|
|
|
|
import org.eclipse.swt.widgets.ToolBar;
|
|
|
|
import org.eclipse.swt.widgets.ToolItem;
|
|
|
|
import org.eclipse.wb.swt.ResourceManager;
|
|
|
|
import org.eclipse.wb.swt.SWTResourceManager;
|
2015-10-22 00:05:29 +02:00
|
|
|
|
2015-11-15 22:15:37 +01:00
|
|
|
import com.minres.scviewer.database.IHierNode;
|
|
|
|
import com.minres.scviewer.database.ITx;
|
|
|
|
import com.minres.scviewer.database.IWaveform;
|
2015-10-22 00:05:29 +02:00
|
|
|
import com.minres.scviewer.database.IWaveformDb;
|
2017-01-23 22:53:14 +01:00
|
|
|
import com.minres.scviewer.e4.application.Messages;
|
2015-11-15 22:15:37 +01:00
|
|
|
import com.minres.scviewer.e4.application.handlers.AddWaveformHandler;
|
2015-10-22 00:05:29 +02:00
|
|
|
import com.minres.scviewer.e4.application.provider.TxDbContentProvider;
|
|
|
|
import com.minres.scviewer.e4.application.provider.TxDbLabelProvider;
|
|
|
|
|
2015-11-22 12:47:07 +01:00
|
|
|
/**
|
|
|
|
* The Class DesignBrowser. It contains the design tree, a list of Streams & signals and a few buttons to
|
|
|
|
* add them them to the waveform view
|
|
|
|
*/
|
2015-11-15 22:15:37 +01:00
|
|
|
public class DesignBrowser {
|
|
|
|
|
2015-11-22 12:47:07 +01:00
|
|
|
/** The Constant POPUP_ID. */
|
2017-01-23 22:53:14 +01:00
|
|
|
private static final String POPUP_ID="com.minres.scviewer.e4.application.parts.DesignBrowser.popupmenu"; //$NON-NLS-1$
|
2015-10-22 00:05:29 +02:00
|
|
|
|
2015-11-22 12:47:07 +01:00
|
|
|
/** The event broker. */
|
2015-10-22 00:05:29 +02:00
|
|
|
@Inject IEventBroker eventBroker;
|
|
|
|
|
2015-11-22 12:47:07 +01:00
|
|
|
/** The selection service. */
|
2015-10-22 00:05:29 +02:00
|
|
|
@Inject ESelectionService selectionService;
|
|
|
|
|
2015-11-22 12:47:07 +01:00
|
|
|
/** The menu service. */
|
2015-11-15 22:15:37 +01:00
|
|
|
@Inject EMenuService menuService;
|
|
|
|
|
2015-11-22 12:47:07 +01:00
|
|
|
/** The eclipse ctx. */
|
2015-11-15 22:15:37 +01:00
|
|
|
@Inject IEclipseContext eclipseCtx;
|
|
|
|
|
2015-11-22 12:47:07 +01:00
|
|
|
/** The sash form. */
|
2015-11-15 22:15:37 +01:00
|
|
|
private SashForm sashForm;
|
|
|
|
|
2015-11-22 12:47:07 +01:00
|
|
|
/** The top. */
|
2015-11-15 22:15:37 +01:00
|
|
|
Composite top;
|
|
|
|
|
2015-11-22 12:47:07 +01:00
|
|
|
/** The bottom. */
|
2015-11-15 22:15:37 +01:00
|
|
|
private Composite bottom;
|
|
|
|
|
2015-11-22 12:47:07 +01:00
|
|
|
/** The tree viewer. */
|
2015-10-29 20:02:08 +01:00
|
|
|
private TreeViewer treeViewer;
|
2015-10-22 00:05:29 +02:00
|
|
|
|
2015-11-22 12:47:07 +01:00
|
|
|
/** The name filter. */
|
2015-11-15 22:15:37 +01:00
|
|
|
private Text nameFilter;
|
2015-10-27 23:39:33 +01:00
|
|
|
|
2015-11-22 12:47:07 +01:00
|
|
|
/** The tx table viewer. */
|
2015-11-15 22:15:37 +01:00
|
|
|
private TableViewer txTableViewer;
|
|
|
|
|
2015-11-22 12:47:07 +01:00
|
|
|
/** The append all item. */
|
2015-11-15 22:15:37 +01:00
|
|
|
ToolItem appendItem, insertItem, insertAllItem, appendAllItem;
|
|
|
|
|
2015-11-22 12:47:07 +01:00
|
|
|
/** The attribute filter. */
|
2015-11-15 22:15:37 +01:00
|
|
|
WaveformAttributeFilter attributeFilter;
|
|
|
|
|
2015-11-22 12:47:07 +01:00
|
|
|
/** The other selection count. */
|
2015-11-15 22:15:37 +01:00
|
|
|
int thisSelectionCount=0, otherSelectionCount=0;
|
|
|
|
|
2015-11-22 12:47:07 +01:00
|
|
|
/** The tree viewer pcl. */
|
2015-11-15 22:15:37 +01:00
|
|
|
private PropertyChangeListener treeViewerPCL = new PropertyChangeListener() {
|
2015-10-22 00:05:29 +02:00
|
|
|
@Override
|
|
|
|
public void propertyChange(PropertyChangeEvent evt) {
|
2017-01-23 22:53:14 +01:00
|
|
|
if("CHILDS".equals(evt.getPropertyName())){ //$NON-NLS-1$
|
2015-10-29 20:02:08 +01:00
|
|
|
treeViewer.getTree().getDisplay().asyncExec(new Runnable() {
|
2015-10-22 00:05:29 +02:00
|
|
|
@Override
|
|
|
|
public void run() {
|
2015-10-29 20:02:08 +01:00
|
|
|
treeViewer.refresh();
|
2015-10-22 00:05:29 +02:00
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
};
|
2015-10-27 23:39:33 +01:00
|
|
|
|
2015-11-22 12:47:07 +01:00
|
|
|
/** The waveform viewer part. */
|
|
|
|
private WaveformViewer waveformViewerPart;
|
2015-11-15 22:15:37 +01:00
|
|
|
|
2015-11-22 12:47:07 +01:00
|
|
|
/** The sash paint listener. */
|
2015-11-15 22:15:37 +01:00
|
|
|
protected PaintListener sashPaintListener=new PaintListener() {
|
|
|
|
@Override
|
|
|
|
public void paintControl(PaintEvent e) {
|
|
|
|
int size=Math.min(e.width, e.height)-1;
|
|
|
|
e.gc.setForeground(SWTResourceManager.getColor(SWT.COLOR_DARK_GRAY));
|
|
|
|
e.gc.setFillRule(SWT.FILL_EVEN_ODD);
|
|
|
|
if(e.width>e.height)
|
|
|
|
e.gc.drawArc(e.x+(e.width-size)/2, e.y, size, size, 0, 360);
|
|
|
|
else
|
|
|
|
e.gc.drawArc(e.x, e.y+(e.height-size)/2, size, size, 0, 360);
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2015-10-22 00:05:29 +02:00
|
|
|
|
2015-11-22 12:47:07 +01:00
|
|
|
/**
|
|
|
|
* Creates the composite.
|
|
|
|
*
|
|
|
|
* @param parent the parent
|
|
|
|
*/
|
2015-10-22 00:05:29 +02:00
|
|
|
@PostConstruct
|
|
|
|
public void createComposite(Composite parent) {
|
2015-11-15 22:15:37 +01:00
|
|
|
sashForm = new SashForm(parent, SWT.BORDER | SWT.SMOOTH | SWT.VERTICAL);
|
|
|
|
|
|
|
|
top = new Composite(sashForm, SWT.NONE);
|
|
|
|
createTreeViewerComposite(top);
|
|
|
|
bottom = new Composite(sashForm, SWT.NONE);
|
|
|
|
createTableComposite(bottom);
|
|
|
|
|
|
|
|
sashForm.setWeights(new int[] {100, 100});
|
|
|
|
sashForm.SASH_WIDTH=5;
|
|
|
|
top.addControlListener(new ControlAdapter() {
|
|
|
|
public void controlResized(ControlEvent e) {
|
|
|
|
sashForm.getChildren()[2].addPaintListener(sashPaintListener);
|
|
|
|
top.removeControlListener(this);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2015-11-22 12:47:07 +01:00
|
|
|
/**
|
|
|
|
* Creates the tree viewer composite.
|
|
|
|
*
|
|
|
|
* @param parent the parent
|
|
|
|
*/
|
2015-11-15 22:15:37 +01:00
|
|
|
public void createTreeViewerComposite(Composite parent) {
|
2015-10-22 00:05:29 +02:00
|
|
|
parent.setLayout(new GridLayout(1, false));
|
2015-10-29 20:02:08 +01:00
|
|
|
treeViewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
|
|
|
|
treeViewer.getTree().setLayoutData(new GridData(GridData.FILL_BOTH));
|
|
|
|
treeViewer.setContentProvider(new TxDbContentProvider());
|
|
|
|
treeViewer.setLabelProvider(new TxDbLabelProvider());
|
|
|
|
treeViewer.setUseHashlookup(true);
|
|
|
|
treeViewer.setAutoExpandLevel(2);
|
2015-11-15 22:15:37 +01:00
|
|
|
treeViewer.addSelectionChangedListener(new ISelectionChangedListener() {
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void selectionChanged(SelectionChangedEvent event) {
|
|
|
|
ISelection selection=event.getSelection();
|
|
|
|
if( selection instanceof IStructuredSelection) {
|
|
|
|
Object object= ((IStructuredSelection)selection).getFirstElement();
|
|
|
|
if(object instanceof IHierNode&& ((IHierNode)object).getChildNodes().size()!=0){
|
|
|
|
txTableViewer.setInput(object);
|
|
|
|
updateButtons();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
2015-10-22 00:05:29 +02:00
|
|
|
}
|
|
|
|
|
2015-11-22 12:47:07 +01:00
|
|
|
/**
|
|
|
|
* Creates the table composite.
|
|
|
|
*
|
|
|
|
* @param parent the parent
|
|
|
|
*/
|
2015-11-15 22:15:37 +01:00
|
|
|
public void createTableComposite(Composite parent) {
|
|
|
|
parent.setLayout(new GridLayout(1, false));
|
|
|
|
|
|
|
|
nameFilter = new Text(parent, SWT.BORDER);
|
2017-01-23 22:53:14 +01:00
|
|
|
nameFilter.setMessage(Messages.DesignBrowser_2);
|
2015-11-15 22:15:37 +01:00
|
|
|
nameFilter.addModifyListener(new ModifyListener() {
|
|
|
|
@Override
|
|
|
|
public void modifyText(ModifyEvent e) {
|
|
|
|
attributeFilter.setSearchText(((Text) e.widget).getText());
|
|
|
|
updateButtons();
|
|
|
|
txTableViewer.refresh();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
nameFilter.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
|
|
|
|
|
|
|
|
attributeFilter = new WaveformAttributeFilter();
|
|
|
|
|
|
|
|
txTableViewer = new TableViewer(parent);
|
|
|
|
txTableViewer.setContentProvider(new TxDbContentProvider(true));
|
|
|
|
txTableViewer.setLabelProvider(new TxDbLabelProvider());
|
|
|
|
txTableViewer.getTable().setLayoutData(new GridData(GridData.FILL_BOTH));
|
|
|
|
txTableViewer.addFilter(attributeFilter);
|
|
|
|
txTableViewer.addDoubleClickListener(new IDoubleClickListener() {
|
|
|
|
@Override
|
|
|
|
public void doubleClick(DoubleClickEvent event) {
|
|
|
|
AddWaveformHandler myHandler = new AddWaveformHandler();
|
2017-01-23 22:53:14 +01:00
|
|
|
Object result = runCommand(myHandler, CanExecute.class, "after", false); //$NON-NLS-1$
|
2015-11-15 22:15:37 +01:00
|
|
|
if(result!=null && (Boolean)result)
|
|
|
|
ContextInjectionFactory.invoke(myHandler, Execute.class, eclipseCtx);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
txTableViewer.addSelectionChangedListener(new ISelectionChangedListener() {
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void selectionChanged(SelectionChangedEvent event) {
|
|
|
|
selectionService.setSelection(event.getSelection());
|
|
|
|
updateButtons();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
menuService.registerContextMenu(txTableViewer.getControl(), POPUP_ID);
|
|
|
|
|
|
|
|
ToolBar toolBar = new ToolBar(parent, SWT.FLAT | SWT.RIGHT);
|
|
|
|
toolBar.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1));
|
|
|
|
toolBar.setBounds(0, 0, 87, 20);
|
|
|
|
|
|
|
|
appendItem = new ToolItem(toolBar, SWT.NONE);
|
2017-01-23 22:53:14 +01:00
|
|
|
appendItem.setToolTipText(Messages.DesignBrowser_4);
|
|
|
|
appendItem.setImage(ResourceManager.getPluginImage("com.minres.scviewer.e4.application", "icons/append_wave.png")); //$NON-NLS-1$ //$NON-NLS-2$
|
2015-11-15 22:15:37 +01:00
|
|
|
appendItem.setEnabled(false);
|
|
|
|
appendItem.addSelectionListener(new SelectionAdapter() {
|
|
|
|
@Override
|
|
|
|
public void widgetSelected(SelectionEvent e) {
|
|
|
|
AddWaveformHandler myHandler = new AddWaveformHandler();
|
2017-01-23 22:53:14 +01:00
|
|
|
Object result = runCommand(myHandler, CanExecute.class, "after", false); //$NON-NLS-1$
|
2015-11-15 22:15:37 +01:00
|
|
|
if(result!=null && (Boolean)result)
|
|
|
|
ContextInjectionFactory.invoke(myHandler, Execute.class, eclipseCtx);
|
|
|
|
}
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
insertItem = new ToolItem(toolBar, SWT.NONE);
|
2017-01-23 22:53:14 +01:00
|
|
|
insertItem.setToolTipText(Messages.DesignBrowser_8);
|
|
|
|
insertItem.setImage(ResourceManager.getPluginImage("com.minres.scviewer.e4.application", "icons/insert_wave.png")); //$NON-NLS-1$ //$NON-NLS-2$
|
2015-11-15 22:15:37 +01:00
|
|
|
insertItem.setEnabled(false);
|
|
|
|
insertItem.addSelectionListener(new SelectionAdapter() {
|
|
|
|
@Override
|
|
|
|
public void widgetSelected(SelectionEvent e) {
|
|
|
|
AddWaveformHandler myHandler = new AddWaveformHandler();
|
2017-01-23 22:53:14 +01:00
|
|
|
Object result = runCommand(myHandler, CanExecute.class, "before", false); //$NON-NLS-1$
|
2015-11-15 22:15:37 +01:00
|
|
|
if(result!=null && (Boolean)result)
|
|
|
|
ContextInjectionFactory.invoke(myHandler, Execute.class, eclipseCtx);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
new ToolItem(toolBar, SWT.SEPARATOR);
|
|
|
|
|
|
|
|
appendAllItem = new ToolItem(toolBar, SWT.NONE);
|
2017-01-23 22:53:14 +01:00
|
|
|
appendAllItem.setToolTipText(Messages.DesignBrowser_12);
|
|
|
|
appendAllItem.setImage(ResourceManager.getPluginImage("com.minres.scviewer.e4.application", "icons/append_all_waves.png")); //$NON-NLS-1$ //$NON-NLS-2$
|
2015-11-15 22:15:37 +01:00
|
|
|
appendAllItem.setEnabled(false);
|
|
|
|
|
|
|
|
new ToolItem(toolBar, SWT.SEPARATOR);
|
|
|
|
appendAllItem.addSelectionListener(new SelectionAdapter() {
|
|
|
|
@Override
|
|
|
|
public void widgetSelected(SelectionEvent e) {
|
|
|
|
Object[] all = getFilteredChildren(txTableViewer);
|
|
|
|
if(all.length>0){
|
|
|
|
Object oldSel=selectionService.getSelection();
|
|
|
|
selectionService.setSelection(new StructuredSelection(all));
|
|
|
|
AddWaveformHandler myHandler = new AddWaveformHandler();
|
2017-01-23 22:53:14 +01:00
|
|
|
Object result = runCommand(myHandler, CanExecute.class, "after", false); //$NON-NLS-1$
|
2015-11-15 22:15:37 +01:00
|
|
|
if(result!=null && (Boolean)result)
|
|
|
|
ContextInjectionFactory.invoke(myHandler, Execute.class, eclipseCtx);
|
|
|
|
selectionService.setSelection(oldSel);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
insertAllItem = new ToolItem(toolBar, SWT.NONE);
|
2017-01-23 22:53:14 +01:00
|
|
|
insertAllItem.setToolTipText(Messages.DesignBrowser_16);
|
|
|
|
insertAllItem.setImage(ResourceManager.getPluginImage("com.minres.scviewer.e4.application", "icons/insert_all_waves.png")); //$NON-NLS-1$ //$NON-NLS-2$
|
2015-11-15 22:15:37 +01:00
|
|
|
insertAllItem.setEnabled(false);
|
|
|
|
insertAllItem.addSelectionListener(new SelectionAdapter() {
|
|
|
|
@Override
|
|
|
|
public void widgetSelected(SelectionEvent e) {
|
|
|
|
Object[] all = getFilteredChildren(txTableViewer);
|
|
|
|
if(all.length>0){
|
|
|
|
Object oldSel=selectionService.getSelection();
|
|
|
|
selectionService.setSelection(new StructuredSelection(all));
|
|
|
|
AddWaveformHandler myHandler = new AddWaveformHandler();
|
2017-01-23 22:53:14 +01:00
|
|
|
Object result = runCommand(myHandler, CanExecute.class, "before", false); //$NON-NLS-1$
|
2015-11-15 22:15:37 +01:00
|
|
|
if(result!=null && (Boolean)result)
|
|
|
|
ContextInjectionFactory.invoke(myHandler, Execute.class, eclipseCtx);
|
|
|
|
selectionService.setSelection(oldSel);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
2015-10-22 00:05:29 +02:00
|
|
|
}
|
|
|
|
|
2015-11-22 12:47:07 +01:00
|
|
|
/**
|
|
|
|
* Sets the focus.
|
|
|
|
*/
|
2015-11-15 22:15:37 +01:00
|
|
|
@Focus
|
|
|
|
public void setFocus() {
|
|
|
|
txTableViewer.getTable().setFocus();
|
|
|
|
IStructuredSelection selection = (IStructuredSelection)txTableViewer.getSelection();
|
|
|
|
if(selection.size()==0){
|
|
|
|
appendItem.setEnabled(false);
|
|
|
|
}
|
|
|
|
selectionService.setSelection(selection);
|
|
|
|
thisSelectionCount=selection.toList().size();
|
|
|
|
updateButtons();
|
2015-10-22 00:05:29 +02:00
|
|
|
}
|
|
|
|
|
2015-11-22 12:47:07 +01:00
|
|
|
/**
|
|
|
|
* Gets the status event.
|
|
|
|
*
|
|
|
|
* @param waveformViewerPart the waveform viewer part
|
|
|
|
* @return the status event
|
|
|
|
*/
|
2015-10-22 00:05:29 +02:00
|
|
|
@SuppressWarnings("unchecked")
|
|
|
|
@Inject @Optional
|
2015-11-22 12:47:07 +01:00
|
|
|
public void getActiveWaveformViewerEvent(@UIEventTopic(WaveformViewer.ACTIVE_WAVEFORMVIEW) WaveformViewer waveformViewerPart) {
|
2015-11-15 22:15:37 +01:00
|
|
|
if(this.waveformViewerPart!=null)
|
|
|
|
this.waveformViewerPart.storeDesignBrowerState(new DBState());
|
|
|
|
this.waveformViewerPart=waveformViewerPart;
|
2015-10-27 23:39:33 +01:00
|
|
|
IWaveformDb database = waveformViewerPart.getDatabase();
|
2015-10-29 20:02:08 +01:00
|
|
|
Object input = treeViewer.getInput();
|
2015-11-15 22:15:37 +01:00
|
|
|
if(input!=null && input instanceof List<?>){
|
|
|
|
IWaveformDb db = ((List<IWaveformDb>)input).get(0);
|
|
|
|
if(db==database) return; // do nothing if old and new daabase is the same
|
|
|
|
((List<IWaveformDb>)input).get(0).removePropertyChangeListener(treeViewerPCL);
|
|
|
|
}
|
2015-11-22 16:38:00 +01:00
|
|
|
treeViewer.setInput(Arrays.asList(database.isLoaded()?new IWaveformDb[]{database}:new IWaveformDb[]{new LoadingWaveformDb()}));
|
2015-11-15 22:15:37 +01:00
|
|
|
Object state=this.waveformViewerPart.retrieveDesignBrowerState();
|
|
|
|
if(state!=null && state instanceof DBState)
|
|
|
|
((DBState)state).apply();
|
|
|
|
else
|
|
|
|
txTableViewer.setInput(null);
|
2015-10-22 00:05:29 +02:00
|
|
|
// Set up the tree viewer
|
2015-11-15 22:15:37 +01:00
|
|
|
database.addPropertyChangeListener(treeViewerPCL);
|
2015-10-22 00:05:29 +02:00
|
|
|
}
|
2015-11-15 22:15:37 +01:00
|
|
|
|
2015-11-22 12:47:07 +01:00
|
|
|
/**
|
|
|
|
* Sets the selection.
|
|
|
|
*
|
|
|
|
* @param selection the selection
|
|
|
|
* @param partService the part service
|
|
|
|
*/
|
2015-11-15 22:15:37 +01:00
|
|
|
@Inject
|
|
|
|
public void setSelection(@Named(IServiceConstants.ACTIVE_SELECTION) @Optional IStructuredSelection selection, EPartService partService){
|
|
|
|
MPart part = partService.getActivePart();
|
|
|
|
if(part!=null && part.getObject() != this && selection!=null){
|
|
|
|
if( selection instanceof IStructuredSelection) {
|
|
|
|
Object object= ((IStructuredSelection)selection).getFirstElement();
|
|
|
|
if(object instanceof IHierNode&& ((IHierNode)object).getChildNodes().size()!=0)
|
|
|
|
txTableViewer.setInput(object);
|
|
|
|
otherSelectionCount = (object instanceof IWaveform<?> || object instanceof ITx)?1:0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
updateButtons();
|
|
|
|
}
|
|
|
|
|
2015-11-22 12:47:07 +01:00
|
|
|
/**
|
|
|
|
* Update buttons.
|
|
|
|
*/
|
2015-11-15 22:15:37 +01:00
|
|
|
private void updateButtons() {
|
|
|
|
if(txTableViewer!=null && !insertItem.isDisposed() && !appendItem.isDisposed() &&
|
|
|
|
!appendAllItem.isDisposed() && !insertAllItem.isDisposed()){
|
|
|
|
AddWaveformHandler myHandler = new AddWaveformHandler();
|
2017-01-23 22:53:14 +01:00
|
|
|
Object result = runCommand(myHandler, CanExecute.class, "after", false); //$NON-NLS-1$
|
2015-11-15 22:15:37 +01:00
|
|
|
appendItem.setEnabled(result instanceof Boolean && (Boolean)result);
|
2017-01-23 22:53:14 +01:00
|
|
|
result = runCommand(myHandler, CanExecute.class, "after", true); //$NON-NLS-1$
|
2015-11-15 22:15:37 +01:00
|
|
|
appendAllItem.setEnabled(result instanceof Boolean && (Boolean)result);
|
2017-01-23 22:53:14 +01:00
|
|
|
result = runCommand(myHandler, CanExecute.class, "before", false); //$NON-NLS-1$
|
2015-11-15 22:15:37 +01:00
|
|
|
insertItem.setEnabled(result instanceof Boolean && (Boolean)result);
|
2017-01-23 22:53:14 +01:00
|
|
|
result = runCommand(myHandler, CanExecute.class, "before", true); //$NON-NLS-1$
|
2015-11-15 22:15:37 +01:00
|
|
|
insertAllItem.setEnabled(result instanceof Boolean && (Boolean)result);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2015-11-22 12:47:07 +01:00
|
|
|
/**
|
|
|
|
* The Class WaveformAttributeFilter.
|
|
|
|
*/
|
2015-11-15 22:15:37 +01:00
|
|
|
public class WaveformAttributeFilter extends ViewerFilter {
|
|
|
|
|
2015-11-22 12:47:07 +01:00
|
|
|
/** The search string. */
|
2015-11-15 22:15:37 +01:00
|
|
|
private String searchString;
|
|
|
|
|
2015-11-22 12:47:07 +01:00
|
|
|
/**
|
|
|
|
* Sets the search text.
|
|
|
|
*
|
|
|
|
* @param s the new search text
|
|
|
|
*/
|
2015-11-15 22:15:37 +01:00
|
|
|
public void setSearchText(String s) {
|
2017-01-23 22:53:14 +01:00
|
|
|
this.searchString = ".*" + s + ".*"; //$NON-NLS-1$ //$NON-NLS-2$
|
2015-11-15 22:15:37 +01:00
|
|
|
}
|
|
|
|
|
2015-11-22 12:47:07 +01:00
|
|
|
/* (non-Javadoc)
|
|
|
|
* @see org.eclipse.jface.viewers.ViewerFilter#select(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
|
|
|
|
*/
|
2015-11-15 22:15:37 +01:00
|
|
|
@Override
|
|
|
|
public boolean select(Viewer viewer, Object parentElement, Object element) {
|
|
|
|
if (searchString == null || searchString.length() == 0) {
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
IWaveform<?> p = (IWaveform<?>) element;
|
|
|
|
if (p.getName().matches(searchString)) {
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2015-11-22 12:47:07 +01:00
|
|
|
/**
|
|
|
|
* Gets the filtered children.
|
|
|
|
*
|
|
|
|
* @param viewer the viewer
|
|
|
|
* @return the filtered children
|
|
|
|
*/
|
2015-11-15 22:15:37 +01:00
|
|
|
protected Object[] getFilteredChildren(TableViewer viewer){
|
|
|
|
Object parent = viewer.getInput();
|
|
|
|
if(parent==null) return new Object[0];
|
|
|
|
Object[] result = null;
|
|
|
|
if (parent != null) {
|
|
|
|
IStructuredContentProvider cp = (IStructuredContentProvider) viewer.getContentProvider();
|
|
|
|
if (cp != null) {
|
|
|
|
result = cp.getElements(parent);
|
|
|
|
if(result==null) return new Object[0];
|
|
|
|
for (int i = 0, n = result.length; i < n; ++i) {
|
|
|
|
if(result[i]==null) return new Object[0];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
ViewerFilter[] filters = viewer.getFilters();
|
|
|
|
if (filters != null) {
|
|
|
|
for (ViewerFilter f:filters) {
|
|
|
|
Object[] filteredResult = f.filter(viewer, parent, result);
|
|
|
|
result = filteredResult;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
2015-11-22 12:47:07 +01:00
|
|
|
/**
|
|
|
|
* Run command.
|
|
|
|
*
|
|
|
|
* @param handler the handler
|
|
|
|
* @param annotation the annotation
|
|
|
|
* @param where the where
|
|
|
|
* @param all the all
|
|
|
|
* @return the object
|
|
|
|
*/
|
2015-11-15 22:15:37 +01:00
|
|
|
protected Object runCommand(AddWaveformHandler handler, Class<? extends Annotation> annotation, String where, Boolean all) {
|
|
|
|
ContextInjectionFactory.inject(handler, eclipseCtx);
|
|
|
|
eclipseCtx.set(AddWaveformHandler.PARAM_WHERE_ID, where);
|
|
|
|
eclipseCtx.set(AddWaveformHandler.PARAM_ALL_ID, all.toString());
|
|
|
|
eclipseCtx.set(DesignBrowser.class, this);
|
2015-11-22 12:47:07 +01:00
|
|
|
eclipseCtx.set(WaveformViewer.class, waveformViewerPart);
|
2015-11-15 22:15:37 +01:00
|
|
|
Object result = ContextInjectionFactory.invoke(handler, annotation, eclipseCtx);
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
2015-11-22 12:47:07 +01:00
|
|
|
/**
|
|
|
|
* Gets the filtered children.
|
|
|
|
*
|
|
|
|
* @return the filtered children
|
|
|
|
*/
|
2015-11-15 22:15:37 +01:00
|
|
|
public Object[] getFilteredChildren() {
|
|
|
|
return getFilteredChildren(txTableViewer);
|
|
|
|
}
|
|
|
|
|
2015-11-22 12:47:07 +01:00
|
|
|
/**
|
|
|
|
* Gets the active waveform viewer part.
|
|
|
|
*
|
|
|
|
* @return the active waveform viewer part
|
|
|
|
*/
|
|
|
|
public WaveformViewer getActiveWaveformViewerPart() {
|
2015-11-15 22:15:37 +01:00
|
|
|
return waveformViewerPart;
|
|
|
|
}
|
|
|
|
|
2015-11-22 12:47:07 +01:00
|
|
|
/**
|
|
|
|
* The Class DBState.
|
|
|
|
*/
|
2015-11-15 22:15:37 +01:00
|
|
|
class DBState {
|
|
|
|
|
2015-11-22 12:47:07 +01:00
|
|
|
/**
|
|
|
|
* Instantiates a new DB state.
|
|
|
|
*/
|
2015-11-15 22:15:37 +01:00
|
|
|
public DBState() {
|
|
|
|
this.expandedElements=treeViewer.getExpandedElements();
|
|
|
|
this.treeSelection=treeViewer.getSelection();
|
|
|
|
this.tableSelection=txTableViewer.getSelection();
|
|
|
|
}
|
2015-10-22 00:05:29 +02:00
|
|
|
|
2015-11-22 12:47:07 +01:00
|
|
|
/**
|
|
|
|
* Apply.
|
|
|
|
*/
|
2015-11-15 22:15:37 +01:00
|
|
|
public void apply() {
|
|
|
|
treeViewer.setExpandedElements(expandedElements);
|
|
|
|
treeViewer.setSelection(treeSelection, true);
|
|
|
|
txTableViewer.setSelection(tableSelection, true);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2015-11-22 12:47:07 +01:00
|
|
|
/** The expanded elements. */
|
2015-11-15 22:15:37 +01:00
|
|
|
private Object[] expandedElements;
|
2015-11-22 12:47:07 +01:00
|
|
|
|
|
|
|
/** The tree selection. */
|
2015-11-15 22:15:37 +01:00
|
|
|
private ISelection treeSelection;
|
2015-11-22 12:47:07 +01:00
|
|
|
|
|
|
|
/** The table selection. */
|
2015-11-15 22:15:37 +01:00
|
|
|
private ISelection tableSelection;
|
2015-10-22 00:05:29 +02:00
|
|
|
}
|
|
|
|
};
|