diff --git a/app/alarm/ui/src/main/java/org/phoebus/applications/alarm/ui/Messages.java b/app/alarm/ui/src/main/java/org/phoebus/applications/alarm/ui/Messages.java index 13272352db..a32d13d6d1 100644 --- a/app/alarm/ui/src/main/java/org/phoebus/applications/alarm/ui/Messages.java +++ b/app/alarm/ui/src/main/java/org/phoebus/applications/alarm/ui/Messages.java @@ -17,6 +17,7 @@ public class Messages public static String addComponentFailed; public static String automatedActions; public static String commands; + public static String collapseTooltip; public static String configure; public static String delayTooltip0; public static String delayTooltip1; @@ -30,6 +31,7 @@ public class Messages public static String disabledCommonEnableDate; public static String disabledVaryingEnableDate; public static String displays; + public static String editingModeTooltip; public static String enableAlarmFailed; public static String enableAlarms; public static String guidance; @@ -43,6 +45,8 @@ public class Messages public static String promptTitle; public static String removeComponentFailed; public static String renameItemFailed; + public static String showAlarmsTooltip; + public static String showDisabledTooltip; public static String totalPVs; public static String unacknowledgeFailed; public static String withEnableDate; diff --git a/app/alarm/ui/src/main/java/org/phoebus/applications/alarm/ui/tree/AlarmTreeView.java b/app/alarm/ui/src/main/java/org/phoebus/applications/alarm/ui/tree/AlarmTreeView.java index f3d65c9801..68acf1b14b 100644 --- a/app/alarm/ui/src/main/java/org/phoebus/applications/alarm/ui/tree/AlarmTreeView.java +++ b/app/alarm/ui/src/main/java/org/phoebus/applications/alarm/ui/tree/AlarmTreeView.java @@ -23,7 +23,10 @@ import java.util.logging.Level; import java.util.stream.Collectors; + +import javafx.beans.property.SimpleBooleanProperty; import javafx.collections.FXCollections; +import javafx.scene.control.ToggleButton; import org.phoebus.applications.alarm.AlarmSystem; import org.phoebus.applications.alarm.client.AlarmClient; import org.phoebus.applications.alarm.client.AlarmClientLeaf; @@ -33,6 +36,7 @@ import org.phoebus.applications.alarm.model.BasicState; import org.phoebus.applications.alarm.ui.AlarmContextMenuHelper; import org.phoebus.applications.alarm.ui.AlarmUI; +import org.phoebus.applications.alarm.ui.Messages; import org.phoebus.applications.alarm.ui.config.ItemConfigDialog; import org.phoebus.framework.selection.Selection; import org.phoebus.framework.selection.SelectionService; @@ -140,6 +144,8 @@ public class AlarmTreeView extends BorderPane implements AlarmClientListener items.remove(changing); }); + private final SimpleBooleanProperty is_editing_mode = new SimpleBooleanProperty(false); + // Javadoc for TreeItem shows example for overriding isLeaf() and getChildren() // to dynamically create TreeItem as TreeView requests information. // @@ -176,7 +182,7 @@ public AlarmTreeView(final AlarmClient model, String itemName) tree_view.setCellFactory(view -> new AlarmTreeViewCell()); tree_view.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE); - setTop(createToolbar()); + setTop(createToolbar(model)); setCenter(tree_view); createContextMenu(); @@ -234,11 +240,21 @@ private void startup() }); } - private ToolBar createToolbar() + private ToolBar createToolbar(final AlarmClient model) { + final ToggleButton editing_mode = new ToggleButton("", + ImageCache.getImageView(AlarmUI.class, "/icons/alarm_edit.png")); + editing_mode.setTooltip(new Tooltip(Messages.editingModeTooltip)); + is_editing_mode.bind(editing_mode.selectedProperty()); + if (AlarmUI.mayConfigure(model)) { + editing_mode.setSelected(true); + } else { + editing_mode.setDisable(true); + } + final Button collapse = new Button("", ImageCache.getImageView(AlarmUI.class, "/icons/collapse.png")); - collapse.setTooltip(new Tooltip("Collapse alarm tree")); + collapse.setTooltip(new Tooltip(Messages.collapseTooltip)); collapse.setOnAction(event -> { for (TreeItem> sub : tree_view.getRoot().getChildren()) @@ -247,15 +263,15 @@ private ToolBar createToolbar() final Button show_alarms = new Button("", ImageCache.getImageView(AlarmUI.class, "/icons/expand_alarms.png")); - show_alarms.setTooltip(new Tooltip("Expand alarm tree to show active alarms")); + show_alarms.setTooltip(new Tooltip(Messages.showAlarmsTooltip)); show_alarms.setOnAction(event -> expandAlarms(tree_view.getRoot())); final Button show_disabled = new Button("", ImageCache.getImageView(AlarmUI.class, "/icons/expand_disabled.png")); - show_disabled.setTooltip(new Tooltip("Expand alarm tree to show disabled PVs")); + show_disabled.setTooltip(new Tooltip(Messages.showDisabledTooltip)); show_disabled.setOnAction(event -> expandDisabledPVs(tree_view.getRoot())); - return new ToolBar(no_server, changing, ToolbarHelper.createSpring(), collapse, show_alarms, show_disabled); + return new ToolBar(no_server, changing, ToolbarHelper.createSpring(), editing_mode, collapse, show_alarms, show_disabled); } ToolBar getToolbar() @@ -344,8 +360,7 @@ private void showServerState(final boolean alive) items.remove(no_server); if (! alive) // Place left of spring, collapse, expand_alarms, - // i.e. right of potential AlarmConfigSelector - items.add(items.size()-3, no_server); + items.add(items.size()-4, no_server); } // AlarmClientModelListener @@ -593,7 +608,7 @@ private void createContextMenu() if (menu_items.size() > 0) menu_items.add(new SeparatorMenuItem()); - if (AlarmUI.mayConfigure(model)) + if (AlarmUI.mayConfigure(model) && is_editing_mode.get()) { if (selection.size() <= 0) // Add first item to empty config @@ -614,16 +629,18 @@ else if (selection.size() == 1) menu_items.add(new MoveTreeItemAction(tree_view, model, item)); } - if (selection.size() >= 1) - { - menu_items.add(new EnableComponentAction(tree_view, model, selection)); - menu_items.add(new DisableAction(tree_view, model, selection)); - menu_items.add(new RemoveComponentAction(tree_view, model, selection)); + } - } + if (selection.size() >= 1) + { + menu_items.add(new EnableComponentAction(tree_view, model, selection)); + menu_items.add(new DisableAction(tree_view, model, selection)); + if (AlarmUI.mayConfigure(model) && is_editing_mode.get()) + menu_items.add(new RemoveComponentAction(tree_view, model, selection)); } menu_items.add(new SeparatorMenuItem()); + menu_items.add(new PrintAction(tree_view)); menu_items.add(new SaveSnapshotAction(DockPane.getActiveDockPane())); @@ -657,9 +674,10 @@ private void addClickSupport() { tree_view.setOnMouseClicked(event -> { - if (!AlarmUI.mayConfigure(model) || - event.getClickCount() != 2 || - tree_view.getSelectionModel().getSelectedItems().size() != 1) + if (!AlarmUI.mayConfigure(model) + || !is_editing_mode.get() + || event.getClickCount() != 2 + || tree_view.getSelectionModel().getSelectedItems().size() != 1) return; final AlarmTreeItem item = tree_view.getSelectionModel().getSelectedItems().get(0).getValue(); diff --git a/app/alarm/ui/src/main/resources/icons/edit.png b/app/alarm/ui/src/main/resources/icons/alarm_edit.png similarity index 100% rename from app/alarm/ui/src/main/resources/icons/edit.png rename to app/alarm/ui/src/main/resources/icons/alarm_edit.png diff --git a/app/alarm/ui/src/main/resources/icons/edit@2x.png b/app/alarm/ui/src/main/resources/icons/alarm_edit@2x.png similarity index 100% rename from app/alarm/ui/src/main/resources/icons/edit@2x.png rename to app/alarm/ui/src/main/resources/icons/alarm_edit@2x.png diff --git a/app/alarm/ui/src/main/resources/org/phoebus/applications/alarm/ui/messages.properties b/app/alarm/ui/src/main/resources/org/phoebus/applications/alarm/ui/messages.properties index 83b48427d4..1df3845fd2 100644 --- a/app/alarm/ui/src/main/resources/org/phoebus/applications/alarm/ui/messages.properties +++ b/app/alarm/ui/src/main/resources/org/phoebus/applications/alarm/ui/messages.properties @@ -28,6 +28,7 @@ automatedActions=Automated Actions: behavior=Behavior: behaviorTooltip=Enable alarms? See also 'Enabling Filter' commands=Commands: +collapseTooltip=Collapse alarm tree configure=Configure dateTimePickerTooltip=Select a date until which the alarm should be disabled delay=Delay @@ -47,6 +48,7 @@ disableUntil=Disable until: disabledCommonEnableDate=Disabled until {0}: {1} disabledVaryingEnableDate=Disabled (varying enable date): {0} displays=Displays: +editingModeTooltip=Toggle editing mode enabled=Enabled enablingFilter=Enabling Filter: enablingFilterTooltip=Optional expression for enabling the alarm @@ -73,6 +75,8 @@ relativeDateLabel=Relative Date: relativeDateTooltip=Select a predefined duration for disabling the alarm removeComponentFailed=Failed to remove component renameItemFailed=Failed to rename item +showAlarmsTooltip=Expand alarm tree to show active alarms +showDisabledTooltip=Expand alarm tree to show disabled PVs timer=Timer title=Title tooltipAddTableItem=Add a new table item diff --git a/phoebus-product/pom.xml b/phoebus-product/pom.xml index f954133b88..43f7872930 100644 --- a/phoebus-product/pom.xml +++ b/phoebus-product/pom.xml @@ -204,7 +204,7 @@ org.phoebus - app-alarm-freetts-annunciator + app-alarm-audio-annunciator 7.0.0-SNAPSHOT true