Browse Source

Merged revisions [10620]-[10678] from 6.2


svn changeset:10693/svn branch:6.3
tags/6.7.0.beta1
Artur Signell 14 years ago
parent
commit
d13c213bca

+ 4
- 2
WebContent/VAADIN/themes/reindeer/styles.css View File

@@ -1,5 +1,5 @@
.v-theme-version:after {content:"9_9_9_INTERNAL-DEBUG-BUILD";}
.v-theme-version-9_9_9_INTERNAL-DEBUG-BUILD {display: none;}
.v-theme-version:after {content:"6_2_0_dev-20091229";}
.v-theme-version-6_2_0_dev-20091229 {display: none;}
/* Automatically compiled css file from subdirectories. */

.v-absolutelayout-wrapper {
@@ -4256,6 +4256,8 @@ td.v-datefield-calendarpanel-nextyear {
.v-ie .v-tabsheet-tabs .v-errorindicator {
zoom: 1;
display: inline;
}
.v-ie8 .v-tabsheet-tabs .v-errorindicator {
display: inline-block;
}


+ 2
- 0
WebContent/VAADIN/themes/reindeer/tabsheet/tabsheet-normal-style.css View File

@@ -157,5 +157,7 @@
.v-ie .v-tabsheet-tabs .v-errorindicator {
zoom: 1;
display: inline;
}
.v-ie8 .v-tabsheet-tabs .v-errorindicator {
display: inline-block;
}

+ 25
- 9
src/com/vaadin/data/Container.java View File

@@ -541,6 +541,24 @@ public interface Container extends Serializable {
* <code>false</code> if not (is a leaf)
*/
public boolean hasChildren(Object itemId);

/**
* <p>
* Removes the Item identified by <code>ItemId</code> from the
* Container.
* </p>
*
* <p>
* Note that this does not remove any children the item might have.
* </p>
*
* @param itemId
* ID of the Item to remove
* @return <code>true</code> if the operation succeeded,
* <code>false</code> if not
*/
public boolean removeItem(Object itemId)
throws UnsupportedOperationException;
}

/**
@@ -555,17 +573,15 @@ public interface Container extends Serializable {
* visible in the container.
*
* When an {@link com.vaadin.data.Ordered} or
* {@link com.vaadin.data.Indexed} container is filtered, all
* operations of these interfaces should only use the filtered contents and
* the filtered indices to the container.
* {@link com.vaadin.data.Indexed} container is filtered, all operations of
* these interfaces should only use the filtered contents and the filtered
* indices to the container.
*
* Adding items (if supported) to a filtered
* {@link com.vaadin.data.Ordered} or
* {@link com.vaadin.data.Indexed} container should insert them
* Adding items (if supported) to a filtered {@link com.vaadin.data.Ordered}
* or {@link com.vaadin.data.Indexed} container should insert them
* immediately after the indicated visible item. The unfiltered position of
* items added at index 0, at index
* {@link com.vaadin.data.Container#size()} or at an undefined
* position is up to the implementation.
* items added at index 0, at index {@link com.vaadin.data.Container#size()}
* or at an undefined position is up to the implementation.
*
* @since 5.0
*/

+ 2
- 3
src/com/vaadin/terminal/gwt/client/ApplicationConfiguration.java View File

@@ -158,9 +158,8 @@ public class ApplicationConfiguration {
// Something went wrong: multiple widgetsets inited
String msg = "Tried to init " + widgetset.getClass().getName()
+ ", but " + initedWidgetSet.getClass().getName()
+ " is already inited.";
System.err.println(msg);
throw new IllegalStateException(msg);
+ " was already inited.";
ApplicationConnection.getConsole().log(msg);
}
initedWidgetSet = widgetset;
ArrayList<String> appIds = new ArrayList<String>();

+ 14
- 0
src/com/vaadin/terminal/gwt/client/ui/VMenuBar.java View File

@@ -787,7 +787,21 @@ public class VMenuBar extends Widget implements Paintable,
paddingWidth = widthBefore - getElement().getClientWidth();
getElement().getStyle().setProperty("padding", "");
}
String overflow = "";
if (BrowserInfo.get().isIE6()) {
// IE6 cannot measure available width correctly without
// overflow:hidden
overflow = getElement().getStyle().getProperty("overflow");
getElement().getStyle().setProperty("overflow", "hidden");
}

int availableWidth = getElement().getClientWidth() - paddingWidth;

if (BrowserInfo.get().isIE6()) {
// IE6 cannot measure available width correctly without
// overflow:hidden
getElement().getStyle().setProperty("overflow", overflow);
}
int diff = availableWidth - getConsumedWidth();

removeItem(moreItem);

+ 81
- 20
src/com/vaadin/terminal/gwt/server/JsonPaintTarget.java View File

@@ -4,9 +4,15 @@

package com.vaadin.terminal.gwt.server;

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.io.Serializable;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedList;
@@ -1000,25 +1006,37 @@ public class JsonPaintTarget implements PaintTarget {
}
}

private static final Map<Class<? extends Paintable>, Class<? extends Paintable>> widgetMappingCache = new HashMap<Class<? extends Paintable>, Class<? extends Paintable>>();

@SuppressWarnings("unchecked")
public String getTag(Paintable paintable) {
/*
* Client widget annotation is searched from component hierarchy to
* detect the component that presumably has client side implementation.
* The server side name is used in the transportation, but encoded into
* integer strings to optimized transferred data.
*/
Class<? extends Paintable> class1 = paintable.getClass();
while (!hasClientWidgetMapping(class1)) {
Class<?> superclass = class1.getSuperclass();
if (superclass != null
&& Paintable.class.isAssignableFrom(superclass)) {
class1 = (Class<? extends Paintable>) superclass;
} else {
System.out
.append("Warning: no superclass of givent has ClientWidget"
+ " annotation. Component will not be mapped correctly on client side.");
break;
Class<? extends Paintable> class1;
synchronized (widgetMappingCache) {
class1 = widgetMappingCache.get(paintable.getClass());
}
if (class1 == null) {
/*
* Client widget annotation is searched from component hierarchy to
* detect the component that presumably has client side
* implementation. The server side name is used in the
* transportation, but encoded into integer strings to optimized
* transferred data.
*/
class1 = paintable.getClass();
while (!hasClientWidgetMapping(class1)) {
Class<?> superclass = class1.getSuperclass();
if (superclass != null
&& Paintable.class.isAssignableFrom(superclass)) {
class1 = (Class<? extends Paintable>) superclass;
} else {
System.out
.append("Warning: no superclass of givent has ClientWidget"
+ " annotation. Component will not be mapped correctly on client side.");
break;
}
}
synchronized (widgetMappingCache) {
widgetMappingCache.put(paintable.getClass(), class1);
}
}

@@ -1029,15 +1047,58 @@ public class JsonPaintTarget implements PaintTarget {

private boolean hasClientWidgetMapping(Class<? extends Paintable> class1) {
try {
ClientWidget annotation = class1.getAnnotation(ClientWidget.class);
return annotation != null;
return class1.isAnnotationPresent(ClientWidget.class);
} catch (RuntimeException e) {
if (e.getStackTrace()[0].getClassName().equals(
"org.glassfish.web.loader.WebappClassLoader")) {

// Glassfish 3 is darn eager to load the value class, even
// though we just want to check if the annotation exists.
// See #3920, remove this hack when fixed in glassfish
return true;
// In some situations (depending on class loading order) it
// would be enough to return true here, but it is safer to check
// the annotation from bytecode

String name = class1.getName().replace('.', File.separatorChar)
+ ".class";

try {
InputStream stream = class1.getClassLoader()
.getResourceAsStream(name);
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(stream));
try {
String line;
boolean atSourcefile = false;
while ((line = bufferedReader.readLine()) != null) {
if (line.startsWith("SourceFile")) {
atSourcefile = true;
}
if (atSourcefile) {
if (line.contains("ClientWidget")) {
return true;
}
}
// TODO could optize to quit at the end attribute
}
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} finally {
try {
bufferedReader.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}

} catch (Throwable e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}

return false;
} else {
// throw exception forward
throw e;

+ 1
- 0
src/com/vaadin/ui/AbstractComponent.java View File

@@ -315,6 +315,7 @@ public abstract class AbstractComponent implements Component, MethodEventSource
*/
public void setLocale(Locale locale) {
this.locale = locale;
requestRepaint();
}

/*

+ 2
- 5
src/com/vaadin/ui/AbstractSelect.java View File

@@ -793,12 +793,9 @@ public abstract class AbstractSelect extends AbstractField implements
return retval;
}

/**
* Removes the item identified by Id from the container. This functionality
* is optional. If the function is not implemented, the functions allways
* returns false.
/*
* (non-Javadoc)
*
* @return True if the operation succeeded.
* @see com.vaadin.data.Container#removeItem(java.lang.Object)
*/
public boolean removeItem(Object itemId)

+ 7
- 0
src/com/vaadin/ui/Tree.java View File

@@ -1068,4 +1068,11 @@ public class Tree extends AbstractSelect implements Container.Hierarchical,
public abstract String getStyle(Object itemId);
}

// Overriden so javadoc comes from Container.Hierarchical
@Override
public boolean removeItem(Object itemId)
throws UnsupportedOperationException {
return super.removeItem(itemId);
}

}

+ 32
- 0
tests/src/com/vaadin/tests/components/button/Buttons.html View File

@@ -0,0 +1,32 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head profile="http://selenium-ide.openqa.org/profiles/test-case">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link rel="selenium.base" href="" />
<title>com.vaadin.tests.components.button.Buttons</title>
</head>
<body>
<table cellpadding="1" cellspacing="1" border="1">
<thead>
<tr><td rowspan="1" colspan="3">com.vaadin.tests.components.button.Buttons</td></tr>
</thead><tbody>
<tr>
<td>open</td>
<td>/run/com.vaadin.tests.components.button.Buttons</td>
<td></td>
</tr>
<tr>
<td>waitForVaadin</td>
<td></td>
<td></td>
</tr>
<tr>
<td>screenCapture</td>
<td></td>
<td></td>
</tr>

</tbody></table>
</body>
</html>

+ 0
- 12
tests/src/com/vaadin/tests/components/button/Buttons.java View File

@@ -8,7 +8,6 @@ import com.vaadin.tests.util.LoremIpsum;
import com.vaadin.ui.Button;
import com.vaadin.ui.CheckBox;
import com.vaadin.ui.Component;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.NativeButton;
import com.vaadin.ui.Button.ClickEvent;

@@ -54,17 +53,6 @@ public class Buttons extends ComponentTestCase {

}

private Component createActionLayout() {
HorizontalLayout actionLayout = new HorizontalLayout();
actionLayout.setSpacing(true);
actionLayout.setMargin(true);
for (Component c : createActions()) {
actionLayout.addComponent(c);
}
addComponent(actionLayout);
return actionLayout;
}

private Button createButton(String text, boolean nativeButton) {
Button b;
if (nativeButton) {

+ 32
- 0
tests/src/com/vaadin/tests/components/menubar/Menubars.html View File

@@ -0,0 +1,32 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head profile="http://selenium-ide.openqa.org/profiles/test-case">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link rel="selenium.base" href="http://artur-laptop.office.itmill.com:8888/" />
<title>com.vaadin.tests.components.menubar.Menubars</title>
</head>
<body>
<table cellpadding="1" cellspacing="1" border="1">
<thead>
<tr><td rowspan="1" colspan="3">com.vaadin.tests.components.menubar.Menubars</td></tr>
</thead><tbody>
<tr>
<td>open</td>
<td>/run/com.vaadin.tests.components.menubar.Menubars</td>
<td></td>
</tr>
<tr>
<td>waitForVaadin</td>
<td></td>
<td></td>
</tr>
<tr>
<td>screenCapture</td>
<td></td>
<td></td>
</tr>

</tbody></table>
</body>
</html>

+ 126
- 0
tests/src/com/vaadin/tests/components/menubar/Menubars.java View File

@@ -0,0 +1,126 @@
package com.vaadin.tests.components.menubar;
import java.util.ArrayList;
import java.util.List;
import com.vaadin.tests.components.ComponentTestCase;
import com.vaadin.ui.Button;
import com.vaadin.ui.CheckBox;
import com.vaadin.ui.Component;
import com.vaadin.ui.MenuBar;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.MenuBar.MenuItem;
public class Menubars extends ComponentTestCase {
MenuBar menubar[] = new MenuBar[20];
@Override
protected void setup() {
super.setup();
MenuBar m;
m = createMenuBar("This is an undefined wide menubar with 3 items", 3);
m.setWidth(null);
addTestComponent(m);
m = createMenuBar(
"This is an undefined wide menubar with fixed 100px height (4 items)",
4);
m.setWidth(null);
m.setHeight("100px");
addTestComponent(m);
m = createMenuBar("This is a 200px wide menubar with 10 items", 10);
m.setWidth("200px");
addTestComponent(m);
m = createMenuBar("This is a 200px wide menubar with 2 items", 2);
m.setWidth("200px");
addTestComponent(m);
m = createMenuBar("This is a 100% wide menubar with 3 items ", 3);
m.setWidth("100%");
addTestComponent(m);
m = createMenuBar("This is a 100% wide menubar with 40 items ", 40);
m.setWidth("100%");
addTestComponent(m);
m = createMenuBar(
"This is a 100% wide menubar with fixed 65px height (5 items). ",
5);
m.setWidth("100%");
m.setHeight("65px");
addTestComponent(m);
}
private MenuBar createMenuBar(String text, int items) {
MenuBar m = new MenuBar();
m.setCaption(text);
for (int i = 1; i <= items; i++) {
MenuItem mi = m.addItem("Item " + i, null);
for (int j = 1; j <= items; j++) {
mi.addItem("Sub menu " + i + "/" + j, null);
}
}
return m;
}
@Override
protected String getDescription() {
return "A generic test for MenuBars in different configurations";
}
@Override
protected List<Component> createActions() {
ArrayList<Component> actions = new ArrayList<Component>();
CheckBox errorIndicators = new CheckBox("Error indicators",
new Button.ClickListener() {
public void buttonClick(ClickEvent event) {
Button b = event.getButton();
boolean enabled = (Boolean) b.getValue();
setErrorIndicators(enabled);
}
});
CheckBox enabled = new CheckBox("Enabled", new Button.ClickListener() {
public void buttonClick(ClickEvent event) {
Button b = event.getButton();
boolean enabled = (Boolean) b.getValue();
setEnabled(enabled);
}
});
CheckBox readonly = new CheckBox("Readonly",
new Button.ClickListener() {
public void buttonClick(ClickEvent event) {
Button b = event.getButton();
boolean enabled = (Boolean) b.getValue();
setReadOnly(enabled);
}
});
errorIndicators.setValue(new Boolean(false));
readonly.setValue(new Boolean(false));
enabled.setValue(new Boolean(true));
errorIndicators.setImmediate(true);
readonly.setImmediate(true);
enabled.setImmediate(true);
actions.add(errorIndicators);
actions.add(readonly);
actions.add(enabled);
return actions;
}
}

Loading…
Cancel
Save