diff --git a/app/display/model/src/main/java/org/csstudio/display/builder/model/Messages.java b/app/display/model/src/main/java/org/csstudio/display/builder/model/Messages.java index 1f56ddea77..2c5e4be163 100644 --- a/app/display/model/src/main/java/org/csstudio/display/builder/model/Messages.java +++ b/app/display/model/src/main/java/org/csstudio/display/builder/model/Messages.java @@ -48,6 +48,7 @@ public class Messages Confirm_BOTH, Confirm_PUSH, Confirm_RELEASE, + DefaultTab, DisplayMode, EmbeddedDisplayWidget_GroupName, EnableGradient, diff --git a/app/display/model/src/main/java/org/csstudio/display/builder/model/widgets/TabsWidget.java b/app/display/model/src/main/java/org/csstudio/display/builder/model/widgets/TabsWidget.java index 4c6c75a782..69944b2a79 100644 --- a/app/display/model/src/main/java/org/csstudio/display/builder/model/widgets/TabsWidget.java +++ b/app/display/model/src/main/java/org/csstudio/display/builder/model/widgets/TabsWidget.java @@ -110,6 +110,10 @@ public ChildrenProperty children() static final WidgetPropertyDescriptor propTabHeight = CommonWidgetProperties.newIntegerPropertyDescriptor(WidgetPropertyCategory.DISPLAY, "tab_height", Messages.Tab_Height); + static final WidgetPropertyDescriptor propDefaultTab = + CommonWidgetProperties.newIntegerPropertyDescriptor(WidgetPropertyCategory.DISPLAY, "default_tab", Messages.DefaultTab, + -1, Integer.MAX_VALUE); + static final WidgetPropertyDescriptor propActiveTab = CommonWidgetProperties.newIntegerPropertyDescriptor(WidgetPropertyCategory.DISPLAY, "active_tab", Messages.ActiveTab, 0, Integer.MAX_VALUE); @@ -180,6 +184,7 @@ public boolean configureFromXML(final ModelReader model_reader, final Widget wid private volatile WidgetProperty background; private volatile WidgetProperty font; + private volatile WidgetProperty default_tab; private volatile WidgetProperty active; private volatile ArrayWidgetProperty tabs; private volatile WidgetProperty direction; @@ -198,6 +203,7 @@ protected void defineProperties(final List> properties) super.defineProperties(properties); properties.add(font = propFont.createProperty(this, WidgetFontService.get(NamedWidgetFonts.DEFAULT))); properties.add(background = propBackgroundColor.createProperty(this, WidgetColorService.getColor(NamedWidgetColors.BACKGROUND))); + properties.add(default_tab = propDefaultTab.createProperty(this, -1)); properties.add(active = propActiveTab.createProperty(this, 0)); properties.add(tabs = propTabs.createProperty(this, Arrays.asList(new TabItemProperty(this, 0), new TabItemProperty(this, 1)))); @@ -243,6 +249,12 @@ public WidgetProperty propFont() return font; } + /** @return 'default_tab' property */ + public WidgetProperty propDefaultTab() + { + return default_tab; + } + /** @return 'active_tab' property */ public WidgetProperty propActiveTab() { diff --git a/app/display/model/src/main/resources/org/csstudio/display/builder/model/messages.properties b/app/display/model/src/main/resources/org/csstudio/display/builder/model/messages.properties index 278fcc4753..dac6fd2f9f 100644 --- a/app/display/model/src/main/resources/org/csstudio/display/builder/model/messages.properties +++ b/app/display/model/src/main/resources/org/csstudio/display/builder/model/messages.properties @@ -30,6 +30,7 @@ Confirm_NONE=No Confirm_BOTH=On Both Confirm_PUSH=On Set Confirm_RELEASE=On Clear +DefaultTab=Default Tab DisplayMode=Display Mode EmbeddedDisplayWidget_GroupName=Group name EnableGradient=Enable Gradient diff --git a/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/TabsRepresentation.java b/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/TabsRepresentation.java index 562c2f7c36..e35b79bab3 100644 --- a/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/TabsRepresentation.java +++ b/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/TabsRepresentation.java @@ -149,9 +149,15 @@ protected void registerListeners() model_widget.propTabs().addPropertyListener(tabsListener); model_widget.propDirection().addUntypedPropertyListener(layoutListener); model_widget.propTabHeight().addUntypedPropertyListener(layoutListener); + model_widget.propDefaultTab().addUntypedPropertyListener(layoutListener); // Select initial tab - track_active_model_tab.propertyChanged(model_widget.propActiveTab(), null, null); + // For backward compatibility, default tab property default value is -1 + // In this case the initial tab is set according to the active tab property + if (model_widget.propDefaultTab().getValue() == -1) + track_active_model_tab.propertyChanged(model_widget.propActiveTab(), null, null); + else + track_active_model_tab.propertyChanged(model_widget.propDefaultTab(), null, null); model_widget.propActiveTab().addPropertyListener(track_active_model_tab); // Update model when UI selects a tab @@ -179,6 +185,7 @@ protected void unregisterListeners() model_widget.propTabs().removePropertyListener(tabsListener); model_widget.propDirection().removePropertyListener(layoutListener); model_widget.propTabHeight().removePropertyListener(layoutListener); + model_widget.propDefaultTab().removePropertyListener(layoutListener); model_widget.propActiveTab().addPropertyListener(track_active_model_tab); super.unregisterListeners();