use of org.csstudio.trends.databrowser3.model.Model in project org.csstudio.display.builder by kasemir.
the class DataBrowserEditor method fillContextMenu.
/**
* Dynamically fill context menu
* @param manager
*/
private void fillContextMenu(final IMenuManager manager) {
final Activator activator = Activator.getDefault();
final Shell shell = getSite().getShell();
final UndoableActionManager op_manager = plot.getPlot().getUndoableActionManager();
manager.add(toggle_toolbar);
manager.add(toggle_legend);
manager.add(new Separator());
manager.add(new AddPVAction(op_manager, shell, model, false));
manager.add(new AddPVAction(op_manager, shell, model, true));
final boolean is_rcp = SingleSourcePlugin.getUIHelper().getUI() == UI.RCP;
if (is_rcp) {
try {
for (IAction imp : SampleImporters.createImportActions(op_manager, shell, model)) manager.add(imp);
} catch (Exception ex) {
ExceptionDetailsErrorDialog.openError(shell, Messages.Error, ex);
}
}
manager.add(new RemoveUnusedAxesAction(op_manager, model));
manager.add(new RefreshAction(controller));
manager.add(new Separator());
manager.add(new OpenPropertiesAction());
manager.add(new OpenViewAction(SearchView.ID, Messages.OpenSearchView, activator.getImageDescriptor("icons/search.gif")));
if (is_rcp)
manager.add(new OpenViewAction(ExportView.ID, Messages.OpenExportView, activator.getImageDescriptor("icons/export.png")));
manager.add(new OpenViewAction(SampleView.ID, Messages.InspectSamples, activator.getImageDescriptor("icons/inspect.gif")));
manager.add(new OpenPerspectiveAction(activator.getImageDescriptor("icons/databrowser.png"), Messages.OpenDataBrowserPerspective, Perspective.ID));
manager.add(new OpenViewAction(WaveformView.ID, Messages.OpenWaveformView, activator.getImageDescriptor("icons/wavesample.gif")));
manager.add(new Separator());
manager.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
if (is_rcp) {
manager.add(new Separator());
manager.add(snapshot);
if (EMailSender.isEmailSupported())
manager.add(new SendEMailAction(shell, plot.getPlot()));
manager.add(new PrintAction(shell, plot.getPlot()));
if (SendToElogAction.isElogAvailable())
manager.add(new SendToElogAction(shell, plot.getPlot()));
}
}
use of org.csstudio.trends.databrowser3.model.Model in project org.csstudio.display.builder by kasemir.
the class DataBrowserEditor method createPartControl.
/**
* Create Plot GUI, connect to model via Controller
* {@inheritDoc}
*/
@Override
public void createPartControl(final Composite parent) {
// Create GUI elements (Plot)
parent.setLayout(new FillLayout());
final JFX_SWT_Wrapper wrapper = new JFX_SWT_Wrapper(parent, () -> {
try {
plot = new ModelBasedPlot(true);
} catch (Exception ex) {
logger.log(Level.WARNING, "Cannot create plot", ex);
}
return new Scene(plot.getPlot());
});
final Control plot_canvas = wrapper.getFXCanvas();
final Scene scene = wrapper.getScene();
JFXCursorFix.apply(scene, parent.getDisplay());
try {
hookDragAndDrop(plot_canvas);
} catch (Throwable ex) {
// Adding D&D to FXCanvas involves some hacking
// that might break as SWT internals get updated.
logger.log(Level.WARNING, "Cannot initialize Drag&Drop", ex);
}
// Create and start controller
controller = new ControllerSWT(parent.getShell(), model, plot);
try {
controller.start();
} catch (Exception ex) {
ExceptionDetailsErrorDialog.openError(parent.getShell(), Messages.Error, ex);
}
// Only the 'page' seems to know if a part is visible or not,
// so use PartListener to update controller's redraw handling
getSite().getPage().addPartListener(new IPartListener2() {
private boolean isThisEditor(final IWorkbenchPartReference part) {
return part.getPart(false) == DataBrowserEditor.this;
}
// Enable redraws...
@Override
public void partOpened(final IWorkbenchPartReference part) {
if (isThisEditor(part))
controller.suppressRedraws(false);
}
@Override
public void partVisible(final IWorkbenchPartReference part) {
if (isThisEditor(part))
controller.suppressRedraws(false);
}
// Suppress redraws...
@Override
public void partHidden(final IWorkbenchPartReference part) {
if (isThisEditor(part))
controller.suppressRedraws(true);
}
@Override
public void partClosed(final IWorkbenchPartReference part) {
if (isThisEditor(part))
controller.suppressRedraws(true);
}
// Ignore
@Override
public void partInputChanged(final IWorkbenchPartReference part) {
/* NOP */
}
@Override
public void partDeactivated(final IWorkbenchPartReference part) {
/* NOP */
}
@Override
public void partBroughtToTop(final IWorkbenchPartReference part) {
/* NOP */
}
@Override
public void partActivated(final IWorkbenchPartReference part) {
/* NOP */
}
});
toggle_legend = new ToggleLegendAction(plot.getPlot(), true);
toggle_toolbar = new ToggleToolbarAction(plot.getPlot(), true);
snapshot = new SnapshotAction(plot.getPlot(), parent.getShell());
createContextMenu(plot_canvas);
}
use of org.csstudio.trends.databrowser3.model.Model in project org.csstudio.display.builder by kasemir.
the class DataBrowserEditor method init.
/**
* Initialize model from editor input
* {@inheritDoc}
*/
@Override
public void init(final IEditorSite site, final IEditorInput input) throws PartInitException {
setSite(site);
if (input instanceof DataBrowserModelEditorInput) {
// Received model with input
model = ((DataBrowserModelEditorInput) input).getModel();
setInput(input);
} else {
// Create new model
model = new Model();
setInput(new DataBrowserModelEditorInput(input, model));
// Load model content from file
try (final InputStream stream = SingleSourcePlugin.getResourceHelper().getInputStream(input)) {
if (stream != null)
new XMLPersistence().load(model, stream);
} catch (Exception ex) {
throw new PartInitException(NLS.bind(Messages.ConfigFileErrorFmt, input.getName()), ex);
}
}
// Update the editor's name from "Data Browser" to title of model or file name
// See DataBrowserModelEditorInput.getName()
setPartName(getEditorInput().getName());
model_listener = new ModelListenerAdapter() {
@Override
public void changedSaveChangesBehavior(final boolean save_changes) {
is_dirty = save_changes;
firePropertyChange(IEditorPart.PROP_DIRTY);
}
@Override
public void changedTitle() {
setDirty(true);
}
@Override
public void changedLayout() {
setDirty(true);
}
@Override
public void changedTiming() {
setDirty(true);
}
@Override
public void changedArchiveRescale() {
setDirty(true);
}
@Override
public void changedColorsOrFonts() {
setDirty(true);
}
@Override
public void changedTimerange() {
setDirty(true);
}
@Override
public void changeTimeAxisConfig() {
setDirty(true);
}
@Override
public void changedAxis(final Optional<AxisConfig> axis) {
setDirty(true);
}
@Override
public void itemAdded(final ModelItem item) {
setDirty(true);
}
@Override
public void itemRemoved(final ModelItem item) {
setDirty(true);
}
@Override
public void changedItemVisibility(final ModelItem item) {
setDirty(true);
}
@Override
public void changedItemLook(final ModelItem item) {
site.getShell().getDisplay().asyncExec(() -> setDirty(true));
}
@Override
public void changedItemDataConfig(PVItem item) {
setDirty(true);
}
@Override
public void scrollEnabled(final boolean scroll_enabled) {
setDirty(true);
}
@Override
public void changedAnnotations() {
setDirty(true);
}
};
model.addListener(model_listener);
}
use of org.csstudio.trends.databrowser3.model.Model in project org.csstudio.display.builder by kasemir.
the class EditFormulaDialogDemo method dialogDemo.
public void dialogDemo() throws Exception {
final Shell shell = new Shell();
// Demo model with some PVs and a formula
final Model model = new Model();
model.addItem(new PVItem("fred", 0.0));
model.addItem(new PVItem("freddy", 0.0));
model.addItem(new PVItem("jane", 0.0));
model.addItem(new PVItem("janet", 0.0));
final FormulaItem formula = new FormulaItem("demo", "2*x2", new FormulaInput[] { new FormulaInput(model.getItem("fred"), "x2"), new FormulaInput(model.getItem("janet"), "jj") });
model.addItem(formula);
final EditFormulaDialog edit = new EditFormulaDialog(null, shell, formula);
System.out.println("Before editing:");
dump(formula);
if (edit.open()) {
System.out.println("After editing:");
dump(formula);
} else
System.out.println("Cancelled");
}
use of org.csstudio.trends.databrowser3.model.Model in project org.csstudio.display.builder by kasemir.
the class ControllerDemo method debug.
protected void debug() {
for (ModelItem item : model.getItems()) {
if (!(item instanceof PVItem)) {
continue;
}
System.out.println("\n" + item.getName() + ":");
final PlotSamples samples = item.getSamples();
samples.getLock().lock();
try {
if (samples.size() <= 0)
continue;
Instant last = samples.get(0).getPosition();
for (int s = 0; s < samples.size(); ++s) {
final PlotSample sample = samples.get(s);
System.out.println(sample);
final Instant time = sample.getPosition();
if (time.compareTo(last) < 0) {
System.out.println("Time sequence error!");
break;
}
last = time;
}
} finally {
samples.getLock().unlock();
}
}
new XMLPersistence().write(model, System.out);
}
Aggregations