Skip to content

Commit

Permalink
Implement new ProgressBar
Browse files Browse the repository at this point in the history
Change-Id: Ie5c4b0f4d9bc65e484f08832343ba97fff61a9b6
  • Loading branch information
ahie authored and Vaadin Code Review committed Aug 26, 2016
1 parent 4a6a632 commit 0c8f57d
Show file tree
Hide file tree
Showing 12 changed files with 204 additions and 27 deletions.
@@ -0,0 +1,55 @@
/*
* 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.client.ui.progressbar;

import com.vaadin.client.communication.StateChangeEvent;
import com.vaadin.client.ui.AbstractFieldConnector;
import com.vaadin.client.ui.VProgressBar;
import com.vaadin.shared.ui.Connect;
import com.vaadin.shared.ui.progressindicator.ProgressBarState;
import com.vaadin.ui.ProgressBar;

/**
* Connector for {@link VProgressBar}.
*
* @since 7.1
* @author Vaadin Ltd
*/
@Connect(ProgressBar.class)
public class ProgressBarConnector extends AbstractFieldConnector {

public ProgressBarConnector() {
super();
}

@Override
public void onStateChanged(StateChangeEvent stateChangeEvent) {
super.onStateChanged(stateChangeEvent);
getWidget().setIndeterminate(getState().indeterminate);
getWidget().setState(getState().state);
}

@Override
public ProgressBarState getState() {
return (ProgressBarState) super.getState();
}

@Override
public VProgressBar getWidget() {
return (VProgressBar) super.getWidget();
}

}
123 changes: 123 additions & 0 deletions server/src/main/java/com/vaadin/ui/ProgressBar.java
@@ -0,0 +1,123 @@
package com.vaadin.ui;

import org.jsoup.nodes.Element;

import com.vaadin.shared.ui.progressindicator.ProgressBarState;
import com.vaadin.ui.declarative.DesignAttributeHandler;
import com.vaadin.ui.declarative.DesignContext;

/**
* A component for displaying progress.
* <p>
* The default mode is to show the current progress internally represented by a
* floating point value between 0 and 1 (inclusive). The progress bar can also
* be in an indeterminate mode showing an animation indicating that the task is
* running but without providing any information about the current progress.
*
* @since 8.0
* @author Vaadin Ltd
*/
public class ProgressBar extends AbstractComponent {

private static final float DEFAULT_VALUE = 0f;

/**
* Creates a new progress bar initially set to 0% progress.
*/
public ProgressBar() {
this(DEFAULT_VALUE);
}

/**
* Creates a new progress bar with the given initial value.
*
* @param progress
* the initial progress value
*/
public ProgressBar(float progress) {
setValue(Float.valueOf(progress));
}

/**
* Gets the value of this progress bar. The value is a <code>float</code>
* between 0 and 1 where 0 represents no progress at all and 1 represents
* fully completed.
*
* @return the current progress value
*/
public float getValue() {
return getState(false).state;
}

/**
* Sets the value of this progress bar. The value is a <code>float</code>
* between 0 and 1 where 0 represents no progress at all and 1 represents
* fully completed.
*
* @param newValue
* the current progress value
*/
public void setValue(float newValue) {
getState().state = newValue;
}

@Override
protected ProgressBarState getState() {
return (ProgressBarState) super.getState();
}

@Override
protected ProgressBarState getState(boolean markAsDirty) {
return (ProgressBarState) super.getState(markAsDirty);
}

/**
* Sets whether or not this progress indicator is indeterminate. In
* indeterminate mode there is an animation indicating that the task is
* running but without providing any information about the current progress.
*
* @param indeterminate
* <code>true</code> to set to indeterminate mode; otherwise
* <code>false</code>
*/
public void setIndeterminate(boolean indeterminate) {
getState().indeterminate = indeterminate;
}

/**
* Gets whether or not this progress indicator is indeterminate. In
* indeterminate mode there is an animation indicating that the task is
* running but without providing any information about the current progress.
*
* @return <code>true</code> if set to indeterminate mode; otherwise
* <code>false</code>
*/
public boolean isIndeterminate() {
return getState(false).indeterminate;
}

@Override
public void readDesign(Element design, DesignContext designContext) {
super.readDesign(design, designContext);
if (design.hasAttr("value") && !design.attr("value").isEmpty()) {
setValue(DesignAttributeHandler.readAttribute("value",
design.attributes(), Float.class));
}
}

@Override
public void writeDesign(Element design, DesignContext designContext) {
super.writeDesign(design, designContext);
Float defaultValue = ((ProgressBar) designContext
.getDefaultInstance(this)).getValue();
DesignAttributeHandler.writeAttribute("value", design.attributes(),
getValue(), defaultValue, Float.class);
}

/**
* Resets the value of this component, effectively displaying zero progress.
*/
public void reset() {
setValue(DEFAULT_VALUE);
}
}
Expand Up @@ -34,6 +34,6 @@ public class ProgressBarState extends AbstractFieldState {
} }
public boolean indeterminate = false; public boolean indeterminate = false;
@NoLayout @NoLayout
public Float state = 0.0f; public float state = 0.0f;


} }
Expand Up @@ -13,14 +13,14 @@
* License for the specific language governing permissions and limitations under * License for the specific language governing permissions and limitations under
* the License. * the License.
*/ */
package com.vaadin.v7.testbench.customelements; package com.vaadin.testbench.customelements;


import org.openqa.selenium.By; import org.openqa.selenium.By;
import org.openqa.selenium.WebElement; import org.openqa.selenium.WebElement;


import com.vaadin.testbench.elementsbase.ServerClass; import com.vaadin.testbench.elementsbase.ServerClass;


@ServerClass("com.vaadin.v7.ui.ProgressBar") @ServerClass("com.vaadin.ui.ProgressBar")
public class ProgressBarElement public class ProgressBarElement
extends com.vaadin.testbench.elements.ProgressBarElement { extends com.vaadin.testbench.elements.ProgressBarElement {


Expand Down
Expand Up @@ -9,9 +9,9 @@
import com.vaadin.ui.Button; import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent; import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Button.ClickListener; import com.vaadin.ui.Button.ClickListener;
import com.vaadin.v7.ui.ProgressBar;
import com.vaadin.ui.GridLayout; import com.vaadin.ui.GridLayout;
import com.vaadin.ui.Label; import com.vaadin.ui.Label;
import com.vaadin.ui.ProgressBar;
import com.vaadin.ui.UI; import com.vaadin.ui.UI;
import com.vaadin.ui.VerticalLayout; import com.vaadin.ui.VerticalLayout;
import com.vaadin.ui.Window; import com.vaadin.ui.Window;
Expand Down
Expand Up @@ -18,8 +18,8 @@
import com.vaadin.annotations.Theme; import com.vaadin.annotations.Theme;
import com.vaadin.server.VaadinRequest; import com.vaadin.server.VaadinRequest;
import com.vaadin.tests.components.AbstractTestUI; import com.vaadin.tests.components.AbstractTestUI;
import com.vaadin.ui.ProgressBar;
import com.vaadin.ui.themes.Reindeer; import com.vaadin.ui.themes.Reindeer;
import com.vaadin.v7.ui.ProgressBar;


@Theme(Reindeer.THEME_NAME) @Theme(Reindeer.THEME_NAME)
public class ProgressBarStaticReindeer extends AbstractTestUI { public class ProgressBarStaticReindeer extends AbstractTestUI {
Expand Down
Expand Up @@ -18,8 +18,8 @@
import com.vaadin.annotations.Theme; import com.vaadin.annotations.Theme;
import com.vaadin.server.VaadinRequest; import com.vaadin.server.VaadinRequest;
import com.vaadin.tests.components.AbstractTestUI; import com.vaadin.tests.components.AbstractTestUI;
import com.vaadin.ui.ProgressBar;
import com.vaadin.ui.themes.Runo; import com.vaadin.ui.themes.Runo;
import com.vaadin.v7.ui.ProgressBar;


@Theme(Runo.THEME_NAME) @Theme(Runo.THEME_NAME)
public class ProgressBarStaticRuno extends AbstractTestUI { public class ProgressBarStaticRuno extends AbstractTestUI {
Expand Down
Expand Up @@ -20,9 +20,10 @@
import com.vaadin.tests.components.AbstractTestUI; import com.vaadin.tests.components.AbstractTestUI;
import com.vaadin.ui.Button; import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent; import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.v7.ui.ProgressBar; import com.vaadin.ui.Component;
import com.vaadin.v7.ui.ProgressIndicator;
import com.vaadin.ui.Label; import com.vaadin.ui.Label;
import com.vaadin.ui.ProgressBar;
import com.vaadin.v7.ui.ProgressIndicator;


public class ProgressBarTest extends AbstractTestUI { public class ProgressBarTest extends AbstractTestUI {


Expand All @@ -48,7 +49,7 @@ public void run() {
} }
} }
}; };
private ProgressBar progressBar; private Component progressBar;
private int counter = 0; private int counter = 0;


@Override @Override
Expand Down Expand Up @@ -84,7 +85,7 @@ public void buttonClick(ClickEvent event) {
updateThread.start(); updateThread.start();
} }


private void useComponent(ProgressBar progressBar) { private void useComponent(Component progressBar) {
if (this.progressBar != null) { if (this.progressBar != null) {
removeComponent(this.progressBar); removeComponent(this.progressBar);
} }
Expand Down
Expand Up @@ -3,9 +3,9 @@
import com.vaadin.data.Binder; import com.vaadin.data.Binder;
import com.vaadin.server.VaadinRequest; import com.vaadin.server.VaadinRequest;
import com.vaadin.tests.components.AbstractTestUI; import com.vaadin.tests.components.AbstractTestUI;
import com.vaadin.ui.ProgressBar;
import com.vaadin.ui.Slider; import com.vaadin.ui.Slider;
import com.vaadin.v7.data.util.BeanItem; import com.vaadin.v7.data.util.BeanItem;
import com.vaadin.v7.ui.ProgressBar;


public class SliderValueFromDataSource extends AbstractTestUI { public class SliderValueFromDataSource extends AbstractTestUI {


Expand Down Expand Up @@ -35,12 +35,14 @@ protected void setup(VaadinRequest request) {
(b, doubleValue) -> item.getItemProperty("floatValue") (b, doubleValue) -> item.getItemProperty("floatValue")
.setValue((float) (doubleValue / 10.0))); .setValue((float) (doubleValue / 10.0)));
binder.bind(bean); binder.bind(bean);
addComponent(slider);


ProgressBar pi = new ProgressBar(); ProgressBar progressBar = new ProgressBar();
pi.setWidth("200px"); progressBar.setWidth("200px");
pi.setPropertyDataSource(item.getItemProperty("floatValue"));
addComponent(pi); slider.addValueChangeListener(
event -> progressBar.setValue(event.getValue().floatValue()));

addComponents(slider, progressBar);
} }


@Override @Override
Expand Down
Expand Up @@ -20,10 +20,10 @@
import com.vaadin.shared.ui.slider.SliderOrientation; import com.vaadin.shared.ui.slider.SliderOrientation;
import com.vaadin.ui.HorizontalLayout; import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Label; import com.vaadin.ui.Label;
import com.vaadin.ui.ProgressBar;
import com.vaadin.ui.Slider; import com.vaadin.ui.Slider;
import com.vaadin.ui.VerticalLayout; import com.vaadin.ui.VerticalLayout;
import com.vaadin.ui.themes.ValoTheme; import com.vaadin.ui.themes.ValoTheme;
import com.vaadin.v7.ui.ProgressBar;


public class Sliders extends VerticalLayout implements View { public class Sliders extends VerticalLayout implements View {
public Sliders() { public Sliders() {
Expand Down
11 changes: 4 additions & 7 deletions uitest/src/main/java/com/vaadin/tests/themes/valo/Tables.java
Expand Up @@ -28,13 +28,13 @@
import com.vaadin.ui.HorizontalLayout; import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Label; import com.vaadin.ui.Label;
import com.vaadin.ui.Notification; import com.vaadin.ui.Notification;
import com.vaadin.ui.ProgressBar;
import com.vaadin.ui.Slider; import com.vaadin.ui.Slider;
import com.vaadin.ui.VerticalLayout; import com.vaadin.ui.VerticalLayout;
import com.vaadin.ui.themes.ValoTheme; import com.vaadin.ui.themes.ValoTheme;
import com.vaadin.v7.data.Container; import com.vaadin.v7.data.Container;
import com.vaadin.v7.ui.ComboBox; import com.vaadin.v7.ui.ComboBox;
import com.vaadin.v7.ui.OptionGroup; import com.vaadin.v7.ui.OptionGroup;
import com.vaadin.v7.ui.ProgressBar;
import com.vaadin.v7.ui.Table; import com.vaadin.v7.ui.Table;
import com.vaadin.v7.ui.Table.Align; import com.vaadin.v7.ui.Table.Align;
import com.vaadin.v7.ui.Table.ColumnGenerator; import com.vaadin.v7.ui.Table.ColumnGenerator;
Expand Down Expand Up @@ -178,8 +178,7 @@ public void drop(DragAndDropEvent event) {
table.removeGeneratedColumn("progress"); table.removeGeneratedColumn("progress");


if (componentsInRows) { if (componentsInRows) {
table.addContainerProperty("textfield", TextField.class, table.addContainerProperty("textfield", TextField.class, null);
null);
table.addGeneratedColumn("textfield", new ColumnGenerator() { table.addGeneratedColumn("textfield", new ColumnGenerator() {
@Override @Override
public Object generateCell(Table source, Object itemId, public Object generateCell(Table source, Object itemId,
Expand All @@ -194,8 +193,7 @@ public Object generateCell(Table source, Object itemId,
} }
}); });


table.addContainerProperty("datefield", TextField.class, table.addContainerProperty("datefield", TextField.class, null);
null);
table.addGeneratedColumn("datefield", new ColumnGenerator() { table.addGeneratedColumn("datefield", new ColumnGenerator() {
@Override @Override
public Object generateCell(Table source, Object itemId, public Object generateCell(Table source, Object itemId,
Expand Down Expand Up @@ -257,8 +255,7 @@ public Object generateCell(Table source, Object itemId,
} }
}); });


table.addContainerProperty("optiongroup", TextField.class, table.addContainerProperty("optiongroup", TextField.class, null);
null);
table.addGeneratedColumn("optiongroup", new ColumnGenerator() { table.addGeneratedColumn("optiongroup", new ColumnGenerator() {
@Override @Override
public Object generateCell(Table source, Object itemId, public Object generateCell(Table source, Object itemId,
Expand Down
Expand Up @@ -19,9 +19,9 @@
import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebDriver;
import org.openqa.selenium.support.ui.ExpectedCondition; import org.openqa.selenium.support.ui.ExpectedCondition;


import com.vaadin.testbench.customelements.ProgressBarElement;
import com.vaadin.testbench.elements.ButtonElement; import com.vaadin.testbench.elements.ButtonElement;
import com.vaadin.tests.tb3.SingleBrowserTest; import com.vaadin.tests.tb3.SingleBrowserTest;
import com.vaadin.v7.testbench.customelements.ProgressBarElement;


public class NoLayoutUpdateWhichNeedsLayoutTest extends SingleBrowserTest { public class NoLayoutUpdateWhichNeedsLayoutTest extends SingleBrowserTest {


Expand All @@ -30,8 +30,7 @@ public void layoutRunForNoLayoutUpdate() {
openTestURL("debug"); openTestURL("debug");
ButtonElement open = $(ButtonElement.class).id("openWindow"); ButtonElement open = $(ButtonElement.class).id("openWindow");
open.click(); open.click();
final ProgressBarElement progress = $( final ProgressBarElement progress = $(ProgressBarElement.class).first();
ProgressBarElement.class).first();
waitUntil(new ExpectedCondition<Boolean>() { waitUntil(new ExpectedCondition<Boolean>() {
@Override @Override
public Boolean apply(WebDriver input) { public Boolean apply(WebDriver input) {
Expand Down

0 comments on commit 0c8f57d

Please sign in to comment.