Make DropDown wider if sum of column width is greater than parent width
diff --git a/bundles/org.eclipse.rap.addons.dropdown/js/rwt/dropdown/DropDown.js b/bundles/org.eclipse.rap.addons.dropdown/js/rwt/dropdown/DropDown.js
index 6d200be..8245c2e 100644
--- a/bundles/org.eclipse.rap.addons.dropdown/js/rwt/dropdown/DropDown.js
+++ b/bundles/org.eclipse.rap.addons.dropdown/js/rwt/dropdown/DropDown.js
@@ -315,15 +315,29 @@
var padding = getPadding();
var itemHeight = Math.floor( font.getSize() * 1.3 ) + padding[ 0 ] + padding[ 2 ];
var visibleItems = Math.min( this._.visibleItemCount, this.getItemCount() );
- var gridWidth = this._.parent.getWidth() - FRAMEWIDTH;
+ var gridWidth = calcGridWidth.apply( this );
var gridHeight = visibleItems * itemHeight;
this._.popup.positionRelativeTo( this._.parent, 0, yOffset );
- this._.popup.setWidth( this._.parent.getWidth() );
+ this._.popup.setWidth( gridWidth + FRAMEWIDTH );
this._.popup.setHeight( gridHeight + FRAMEWIDTH );
this._.grid.setDimension( gridWidth, gridHeight );
renderItemMetrics.apply( this, [ itemHeight, gridWidth, padding ] );
};
+ var calcGridWidth = function() {
+ var result = this._.parent.getWidth() - FRAMEWIDTH;
+ if( this._.columns ) {
+ var columnsSum = 0;
+ for( var i = 0; i < this._.columns.length; i++ ) {
+ columnsSum += this._.columns[ i ];
+ }
+ if( columnsSum > result ) {
+ result = columnsSum;
+ }
+ }
+ return result;
+ };
+
var renderItemMetrics = function( itemHeight, itemWidth, padding ) {
this._.grid.setItemHeight( itemHeight );
if( this._.columns != null ) {
diff --git a/examples/org.eclipse.rap.addons.dropdown.demo/src/org/eclipse/rap/addons/dropdown/demo/DropDownDemo.java b/examples/org.eclipse.rap.addons.dropdown.demo/src/org/eclipse/rap/addons/dropdown/demo/DropDownDemo.java
index 809391b..750fc77 100644
--- a/examples/org.eclipse.rap.addons.dropdown.demo/src/org/eclipse/rap/addons/dropdown/demo/DropDownDemo.java
+++ b/examples/org.eclipse.rap.addons.dropdown.demo/src/org/eclipse/rap/addons/dropdown/demo/DropDownDemo.java
@@ -119,7 +119,7 @@
dropdown.hide();
}
} );
- dropdown.setData( "columns", new int[] { 130, 60 } );
+ dropdown.setData( "columns", new int[] { 300, 60 } );
}
private void createKFZExample( Composite parent ) {
diff --git a/tests/org.eclipse.rap.addons.dropdown.test/js/rwt/dropdown/DropDown_Test.js b/tests/org.eclipse.rap.addons.dropdown.test/js/rwt/dropdown/DropDown_Test.js
index 3a27dc2..f32a0de 100644
--- a/tests/org.eclipse.rap.addons.dropdown.test/js/rwt/dropdown/DropDown_Test.js
+++ b/tests/org.eclipse.rap.addons.dropdown.test/js/rwt/dropdown/DropDown_Test.js
@@ -483,6 +483,20 @@
assertEquals( 40 - PADDING_RIGHT - PADDING_LEFT, config.itemTextWidth[ 1 ] );
},
+ testSetColumns_setsPopUpWidth : function() {
+ dropdown.setColumns( [ 100, 200, 100 ] );
+ showDropDown();
+
+ assertEquals( 400, popup.getInnerWidth() );
+ },
+
+ testSetColumns_setsDoesNotSetPopUpWidthIfSmaller : function() {
+ dropdown.setColumns( [ 30 ] );
+ showDropDown();
+
+ assertEquals( 100, popup.getWidth() );
+ },
+
testSetColumns_separatesItemsByTabulator : function() {
dropdown.setColumns( [ 30, 40 ] );
var tab = String.fromCharCode( 9 );