Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
/*
* Copyright (C) 2024 European Spallation Source ERIC.
*/

package org.csstudio.display.actions;

import javafx.scene.image.Image;
import org.csstudio.display.builder.model.persist.ModelReader;
import org.csstudio.display.builder.model.persist.ModelWriter;
import org.csstudio.display.builder.model.persist.XMLTags;
import org.csstudio.display.builder.model.properties.ActionInfoBase;
import org.csstudio.display.builder.representation.javafx.actionsdialog.ActionsDialog;
import org.phoebus.ui.javafx.ImageCache;
import org.w3c.dom.Element;

import javax.xml.stream.XMLStreamWriter;

public class CloseDisplayAction extends ActionInfoBase {

public static final String CLOSE_DISPLAY = "close_display";
private static final Integer PRIORITY = 10;

@SuppressWarnings("unused")
/**
* Do not remove, needed by SPI framework.
*/
public CloseDisplayAction() {
this.description = Messages.ActionCloseDisplay;
this.type = CLOSE_DISPLAY;
}

public CloseDisplayAction(String description) {
this.description = description;
this.type = CLOSE_DISPLAY;
}

@Override
public Image getImage() {
return ImageCache.getImage(ActionsDialog.class, "/icons/close_display.png");
}

@Override
public Integer getPriority() {
return PRIORITY;
}

@Override
public void readFromXML(ModelReader modelReader, Element actionXml) {
if (description.isEmpty())
description = Messages.ActionCloseDisplay;
}

@Override
public void writeToXML(ModelWriter modelWriter, XMLStreamWriter writer) throws Exception {
writer.writeAttribute(XMLTags.TYPE, CLOSE_DISPLAY);
writeDescriptionToXML(writer, description);
writer.writeStartElement(XMLTags.COMMAND);
writer.writeEndElement();
}

@Override
public boolean matchesAction(String actionId) {
return actionId.equalsIgnoreCase(CLOSE_DISPLAY);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
/*
* Copyright (C) 2024 European Spallation Source ERIC.
*/

package org.csstudio.display.actions;

import org.csstudio.display.builder.model.ActionControllerBase;
import org.csstudio.display.builder.model.Widget;
import org.csstudio.display.builder.model.spi.ActionInfo;

import javafx.fxml.FXML;

/**
* FXML Controller for the close display action editor
*/
public class CloseDisplayActionController extends ActionControllerBase {

public CloseDisplayActionController(Widget widget, CloseDisplayAction closeDisplayActionInfo){
descriptionProperty.set(closeDisplayActionInfo.getDescription());
}

/**
* Init
*/
@FXML
public void initialize() {
super.initialize();
}

public ActionInfo getActionInfo(){
return new CloseDisplayAction(descriptionProperty.get());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
/*
* Copyright (C) 2024 European Spallation Source ERIC.
*/

package org.csstudio.display.actions;

import javafx.fxml.FXMLLoader;
import javafx.scene.Node;
import org.csstudio.display.builder.model.Widget;
import org.csstudio.display.builder.model.spi.ActionEditor;
import org.csstudio.display.builder.model.spi.ActionInfo;
import org.phoebus.framework.nls.NLS;

import java.io.IOException;
import java.util.ResourceBundle;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
* Editor for {@link CloseDisplayAction}.
*/
public class CloseDisplayActionEditor implements ActionEditor {

private CloseDisplayActionController closeDisplayActionController;
private Node editorUi;

@Override
public boolean matchesAction(String type) {
return CloseDisplayAction.CLOSE_DISPLAY.equalsIgnoreCase(type);
}

@Override
public ActionInfo getActionInfo() {
return closeDisplayActionController.getActionInfo();
}

@Override
public Node getEditorUi() {
return editorUi;
}

@Override
public void configure(Widget widget, ActionInfo actionInfo) {
ResourceBundle resourceBundle = NLS.getMessages(Messages.class);

FXMLLoader fxmlLoader = new FXMLLoader();
fxmlLoader.setResources(resourceBundle);
fxmlLoader.setLocation(this.getClass().getResource("CloseDisplayAction.fxml"));
fxmlLoader.setControllerFactory(clazz -> {
try {
return clazz.getConstructor(Widget.class, CloseDisplayAction.class).newInstance(widget, actionInfo);
} catch (Exception e) {
Logger.getLogger(CloseDisplayActionEditor.class.getName()).log(Level.SEVERE, "Failed to construct CloseDisplayActionController", e);
}
return null;
});

try {
editorUi = fxmlLoader.load();
closeDisplayActionController = fxmlLoader.getController();
} catch (IOException e) {
Logger.getLogger(CloseDisplayActionEditor.class.getName()).log(Level.SEVERE, "Failed to load the CloseDisplayAction UI", e);
throw new RuntimeException(e);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,8 @@ public class Messages {
/**
* Externalized Strings
*/
public static String ActionExecuteCommand,
public static String ActionCloseDisplay,
ActionExecuteCommand,
ActionExecuteScript,
ActionOpenDisplay,
ActionOpenFile,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,4 @@ org.csstudio.display.actions.ExecuteScriptActionEditor
org.csstudio.display.actions.OpenDisplayActionEditor
org.csstudio.display.actions.OpenFileActionEditor
org.csstudio.display.actions.OpenWebPageActionEditor
org.csstudio.display.actions.CloseDisplayActionEditor
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,4 @@ org.csstudio.display.actions.ExecuteScriptAction
org.csstudio.display.actions.ExecuteCommandAction
org.csstudio.display.actions.OpenFileAction
org.csstudio.display.actions.OpenWebPageAction
org.csstudio.display.actions.CloseDisplayAction
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>

<!--
~ Copyright (C) 2024 European Spallation Source ERIC.
-->

<GridPane hgap="10.0" vgap="10.0" xmlns="http://javafx.com/javafx/11.0.1"
xmlns:fx="http://javafx.com/fxml/1"
fx:controller="org.csstudio.display.actions.CloseDisplayActionController">
<children>
<Label text="%ActionsDialog_Description" />
<TextField fx:id="description" text="Close Display" GridPane.columnIndex="1" GridPane.columnSpan="2" GridPane.hgrow="ALWAYS" />
</children>
<columnConstraints>
<ColumnConstraints />
<ColumnConstraints />
<ColumnConstraints />
</columnConstraints>
<rowConstraints>
<RowConstraints />
<RowConstraints />
<RowConstraints />
<RowConstraints />
<RowConstraints />
</rowConstraints>
</GridPane>
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
ActionCloseDisplay=Close Display
ActionExecuteCommand=Execute Command
ActionExecuteScript=Execute Script
ActionOpenDisplay=Open Display
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
/*
* Copyright (C) 2024 European Spallation Source ERIC.
*/

package org.csstudio.display.builder.runtime.app.actionhandlers;

import java.util.logging.Level;
import java.util.logging.Logger;

import org.csstudio.display.actions.CloseDisplayAction;
import org.csstudio.display.builder.model.DisplayModel;
import org.csstudio.display.builder.model.Widget;
import org.csstudio.display.builder.model.spi.ActionHandler;
import org.csstudio.display.builder.model.spi.ActionInfo;
import org.csstudio.display.builder.representation.ToolkitRepresentation;

public class CloseDisplayActionHandler implements ActionHandler {

private final Logger logger = Logger.getLogger(CloseDisplayActionHandler.class.getName());

@Override
public void handleAction(Widget sourceWidget, ActionInfo pluggableActionInfo) {
CloseDisplayAction action = (CloseDisplayAction) pluggableActionInfo;

try
{
final DisplayModel model = sourceWidget.getTopDisplayModel();
final ToolkitRepresentation<Object, Object> toolkit = ToolkitRepresentation.getToolkit(model);
toolkit.closeWindow(model);
}
catch (Throwable ex)
{
logger.log(Level.WARNING, action+" failed. Cannot close display", ex);
}
}

@Override
public boolean matches(ActionInfo pluggableActionInfo) {
return pluggableActionInfo.getType().equalsIgnoreCase(CloseDisplayAction.CLOSE_DISPLAY);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,5 @@ org.csstudio.display.builder.runtime.app.actionhandlers.WritePVActionHandler
org.csstudio.display.builder.runtime.app.actionhandlers.ExecuteScriptActionHandler
org.csstudio.display.builder.runtime.app.actionhandlers.ExecuteCommandActionHandler
org.csstudio.display.builder.runtime.app.actionhandlers.OpenFileActionHandler
org.csstudio.display.builder.runtime.app.actionhandlers.OpenWebPageActionHandler
org.csstudio.display.builder.runtime.app.actionhandlers.OpenWebPageActionHandler
org.csstudio.display.builder.runtime.app.actionhandlers.CloseDisplayActionHandler