From aff7361b6667542f04801af8df382707544b69f3 Mon Sep 17 00:00:00 2001 From: Henri Sara Date: Tue, 29 Aug 2017 14:56:36 +0300 Subject: [PATCH] Omit duplicate caption for a Panel in a Composite Correctly render components that handle their own captions inside a Composite. Fixes #9848 --- .../ui/composite/CompositeConnector.java | 9 ++++ .../composite/CompositePanelCaptionUI.java | 46 +++++++++++++++++++ .../CompositePanelCaptionUITest.java | 30 ++++++++++++ 3 files changed, 85 insertions(+) create mode 100644 uitest/src/main/java/com/vaadin/tests/components/composite/CompositePanelCaptionUI.java create mode 100644 uitest/src/test/java/com/vaadin/tests/components/composite/CompositePanelCaptionUITest.java diff --git a/client/src/main/java/com/vaadin/client/ui/composite/CompositeConnector.java b/client/src/main/java/com/vaadin/client/ui/composite/CompositeConnector.java index 3322063d51..9b784b7f70 100644 --- a/client/src/main/java/com/vaadin/client/ui/composite/CompositeConnector.java +++ b/client/src/main/java/com/vaadin/client/ui/composite/CompositeConnector.java @@ -116,4 +116,13 @@ public class CompositeConnector extends AbstractHasComponentsConnector ((DirectionalManagedLayout) childConnector).layoutVertically(); } } + + @Override + public boolean delegateCaptionHandling() { + if (!hasChildConnector()) { + return true; + } else { + return getChildConnector().delegateCaptionHandling(); + } + } } diff --git a/uitest/src/main/java/com/vaadin/tests/components/composite/CompositePanelCaptionUI.java b/uitest/src/main/java/com/vaadin/tests/components/composite/CompositePanelCaptionUI.java new file mode 100644 index 0000000000..ee6ce4d4a0 --- /dev/null +++ b/uitest/src/main/java/com/vaadin/tests/components/composite/CompositePanelCaptionUI.java @@ -0,0 +1,46 @@ +package com.vaadin.tests.components.composite; + +import com.vaadin.annotations.Widgetset; +import com.vaadin.server.VaadinRequest; +import com.vaadin.tests.components.AbstractTestUI; +import com.vaadin.ui.Composite; +import com.vaadin.ui.CustomComponent; +import com.vaadin.ui.Label; +import com.vaadin.ui.Panel; +import com.vaadin.ui.VerticalLayout; +import com.vaadin.ui.themes.ValoTheme; + +@Widgetset("com.vaadin.DefaultWidgetSet") +public class CompositePanelCaptionUI extends AbstractTestUI { + @Override + public void setup(VaadinRequest request) { + Panel regularPanel = new Panel("Regular ol' panel", + createPanelContent()); + CustomComponentPanel customComponentPanel = new CustomComponentPanel(); + CompositePanel compositePanel = new CompositePanel(); + + addComponents(regularPanel, customComponentPanel, compositePanel); + } + + private VerticalLayout createPanelContent() { + Label helloWorld = new Label("Hello world!"); + helloWorld.addStyleName(ValoTheme.LABEL_HUGE); + + return new VerticalLayout(helloWorld); + } + + private class CustomComponentPanel extends CustomComponent { + public CustomComponentPanel() { + Panel panel = new Panel("CustomComponentPanel", + createPanelContent()); + setCompositionRoot(panel); + } + } + + private class CompositePanel extends Composite { + public CompositePanel() { + Panel panel = new Panel("CompositePanel", createPanelContent()); + setCompositionRoot(panel); + } + } +} diff --git a/uitest/src/test/java/com/vaadin/tests/components/composite/CompositePanelCaptionUITest.java b/uitest/src/test/java/com/vaadin/tests/components/composite/CompositePanelCaptionUITest.java new file mode 100644 index 0000000000..75263e0e82 --- /dev/null +++ b/uitest/src/test/java/com/vaadin/tests/components/composite/CompositePanelCaptionUITest.java @@ -0,0 +1,30 @@ +/* + * Copyright 2000-2016 Vaadin Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.vaadin.tests.components.composite; + +import org.junit.Test; + +import com.vaadin.testbench.By; +import com.vaadin.tests.tb3.SingleBrowserTest; + +public class CompositePanelCaptionUITest extends SingleBrowserTest { + + @Test + public void compositeDoesNotDuplicateCaption() { + openTestURL(); + assertElementNotPresent(By.className("v-caption")); + } +} -- 2.39.5