[jboss-svn-commits] JBL Code SVN: r36254 - in labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client: util and 1 other directory.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Dec 8 07:53:51 EST 2010


Author: Rikkola
Date: 2010-12-08 07:53:51 -0500 (Wed, 08 Dec 2010)
New Revision: 36254

Added:
   labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/explorer/ClosableLabel.java
   labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/explorer/ClosableLabel.ui.xml
   labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/util/ScrollTabLayoutPanel.java
Removed:
   labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/explorer/ScrollTabLayoutPanel.java
Modified:
   labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/explorer/ExplorerViewCenterPanel.java
Log:
GUVNOR-1105 : Add round corners
-Tabs


Added: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/explorer/ClosableLabel.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/explorer/ClosableLabel.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/explorer/ClosableLabel.java	2010-12-08 12:53:51 UTC (rev 36254)
@@ -0,0 +1,81 @@
+/*
+ * Copyright 2010 JBoss Inc
+ *
+ * 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 org.drools.guvnor.client.explorer;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.event.dom.client.ClickEvent;
+import com.google.gwt.event.dom.client.MouseOutEvent;
+import com.google.gwt.event.dom.client.MouseOverEvent;
+import com.google.gwt.event.logical.shared.CloseEvent;
+import com.google.gwt.event.logical.shared.CloseHandler;
+import com.google.gwt.event.logical.shared.HasCloseHandlers;
+import com.google.gwt.event.shared.HandlerRegistration;
+import com.google.gwt.uibinder.client.UiBinder;
+import com.google.gwt.uibinder.client.UiField;
+import com.google.gwt.uibinder.client.UiHandler;
+import com.google.gwt.user.client.ui.Composite;
+import com.google.gwt.user.client.ui.Image;
+import com.google.gwt.user.client.ui.Label;
+import com.google.gwt.user.client.ui.Widget;
+
+/**
+ * @author rikkola
+ */
+public class ClosableLabel extends Composite
+    implements
+    HasCloseHandlers<ClosableLabel> {
+
+    interface ClosableLabelBinder
+        extends
+        UiBinder<Widget, ClosableLabel> {
+    }
+
+    private static ClosableLabelBinder uiBinder = GWT.create( ClosableLabelBinder.class );
+
+    @UiField
+    Label                              text;
+
+    @UiField
+    Image                              closeButton;
+
+    public ClosableLabel(final String title) {
+        initWidget( uiBinder.createAndBindUi( this ) );
+
+        text.setText( title );
+    }
+
+    @UiHandler("basePanel")
+    void showCloseButton(MouseOverEvent event) {
+        closeButton.setVisible( true );
+    }
+
+    @UiHandler("basePanel")
+    void hideCloseButton(MouseOutEvent event) {
+        closeButton.setVisible( false );
+    }
+
+    @UiHandler("closeButton")
+    void closeTab(ClickEvent clickEvent) {
+        CloseEvent.fire( this,
+                         this );
+    }
+
+    public HandlerRegistration addCloseHandler(CloseHandler<ClosableLabel> handler) {
+        return addHandler( handler,
+                           CloseEvent.getType() );
+    }
+
+}

Added: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/explorer/ClosableLabel.ui.xml
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/explorer/ClosableLabel.ui.xml	                        (rev 0)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/explorer/ClosableLabel.ui.xml	2010-12-08 12:53:51 UTC (rev 36254)
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright 2010 JBoss Inc
+ 
+  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.
+ -->
+<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
+<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'
+	xmlns:gwt='urn:import:com.google.gwt.user.client.ui'>
+
+	<ui:with field='images' type='org.drools.guvnor.client.resources.Images'/>
+	
+	<gwt:FocusPanel ui:field="basePanel">
+		<gwt:HorizontalPanel>
+			<gwt:Label ui:field="text"></gwt:Label>
+			<gwt:Image ui:field="closeButton" resource='{images.close}' visible='false' ></gwt:Image>	
+		</gwt:HorizontalPanel>
+	</gwt:FocusPanel>
+	
+</ui:UiBinder>
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/explorer/ExplorerViewCenterPanel.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/explorer/ExplorerViewCenterPanel.java	2010-12-08 10:02:14 UTC (rev 36253)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/explorer/ExplorerViewCenterPanel.java	2010-12-08 12:53:51 UTC (rev 36254)
@@ -22,19 +22,13 @@
 
 import org.drools.guvnor.client.common.LoadingPopup;
 import org.drools.guvnor.client.packages.PackageEditor;
-import org.drools.guvnor.client.resources.Images;
 import org.drools.guvnor.client.ruleeditor.GuvnorEditor;
+import org.drools.guvnor.client.util.ScrollTabLayoutPanel;
 
-import com.google.gwt.core.client.GWT;
 import com.google.gwt.dom.client.Style.Unit;
-import com.google.gwt.event.dom.client.ClickEvent;
-import com.google.gwt.event.dom.client.ClickHandler;
-import com.google.gwt.user.client.DOM;
+import com.google.gwt.event.logical.shared.CloseEvent;
+import com.google.gwt.event.logical.shared.CloseHandler;
 import com.google.gwt.user.client.ui.Composite;
-import com.google.gwt.user.client.ui.HTML;
-import com.google.gwt.user.client.ui.HorizontalPanel;
-import com.google.gwt.user.client.ui.Image;
-import com.google.gwt.user.client.ui.Label;
 import com.google.gwt.user.client.ui.Panel;
 import com.google.gwt.user.client.ui.ScrollPanel;
 import com.google.gwt.user.client.ui.Widget;
@@ -44,7 +38,6 @@
  * @author Fernando Meyer, Michael Neale
  */
 public class ExplorerViewCenterPanel extends Composite {
-    private static Images              images               = (Images) GWT.create( Images.class );
 
     private final ScrollTabLayoutPanel tabLayoutPanel;
 
@@ -123,14 +116,10 @@
 
     private Widget newClosableLabel(final Panel panel,
                                     final String title) {
-        final HorizontalPanel hPanel = new HorizontalPanel();
-        final Label label = new Label( title );
-        DOM.setStyleAttribute( label.getElement(),
-                               "whiteSpace",
-                               "nowrap" );
-        Image closeBtn = new Image( images.close() );
-        closeBtn.addClickHandler( new ClickHandler() {
-            public void onClick(ClickEvent arg0) {
+        ClosableLabel closableLabel = new ClosableLabel( title );
+
+        closableLabel.addCloseHandler( new CloseHandler<ClosableLabel>() {
+            public void onClose(CloseEvent<ClosableLabel> event) {
                 int widgetIndex = tabLayoutPanel.getWidgetIndex( panel );
                 if ( widgetIndex == tabLayoutPanel.getSelectedIndex() ) {
                     if ( isOnlyOneTabLeft() ) {
@@ -149,10 +138,7 @@
             }
         } );
 
-        hPanel.add( label );
-        hPanel.add( new HTML( "&nbsp&nbsp&nbsp" ) );
-        hPanel.add( closeBtn );
-        return hPanel;
+        return closableLabel;
     }
 
     /**

Deleted: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/explorer/ScrollTabLayoutPanel.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/explorer/ScrollTabLayoutPanel.java	2010-12-08 10:02:14 UTC (rev 36253)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/explorer/ScrollTabLayoutPanel.java	2010-12-08 12:53:51 UTC (rev 36254)
@@ -1,212 +0,0 @@
-package org.drools.guvnor.client.explorer;
-
-import org.drools.guvnor.client.resources.Images;
-
-import com.google.gwt.core.client.GWT;
-import com.google.gwt.core.client.Scheduler;
-import com.google.gwt.dom.client.Style.Unit;
-import com.google.gwt.event.dom.client.ClickEvent;
-import com.google.gwt.event.dom.client.ClickHandler;
-import com.google.gwt.event.logical.shared.ResizeEvent;
-import com.google.gwt.event.logical.shared.ResizeHandler;
-import com.google.gwt.event.shared.HandlerRegistration;
-import com.google.gwt.layout.client.Layout.Alignment;
-import com.google.gwt.user.client.Window;
-import com.google.gwt.user.client.ui.FlowPanel;
-import com.google.gwt.user.client.ui.Image;
-import com.google.gwt.user.client.ui.LayoutPanel;
-import com.google.gwt.user.client.ui.TabLayoutPanel;
-import com.google.gwt.user.client.ui.Widget;
-
-public class ScrollTabLayoutPanel extends TabLayoutPanel {
-    private static Images              images               = (Images) GWT.create( Images.class );
-
-	private Image scrollLeft;
-	private Image scrollRight;
-	private FlowPanel tabBar = null;
-	private LayoutPanel panel;
-	private static final int ScrollLengh = 100;
-	
-	private double barHeight;
-	private Unit barUnit;
-	private boolean isScrollingEnabled = false;
-
-    private HandlerRegistration windowResizeHandler;
-    
-	public ScrollTabLayoutPanel(double barHeight, Unit barUnit) {
-		super(barHeight, barUnit);
-		this.barHeight = barHeight;
-		this.barUnit = barUnit;
-		this.panel = (LayoutPanel) getWidget();
-
-		for (int i = 0; i < panel.getWidgetCount(); ++i) {
-			Widget widget = panel.getWidget(i);
-			if (widget instanceof FlowPanel) {
-				tabBar = (FlowPanel) widget;
-				break; 
-			}
-		}
-	}
-	
-    @Override
-    public void add(Widget child, Widget tab) {
-            super.add(child, tab);
-            checkIfScrollButtonsNecessary();
-    }
-
-    @Override
-    public boolean remove(Widget w) {
-            boolean b = super.remove(w);
-            checkIfScrollButtonsNecessary();
-            return b;
-    }
-    
-    @Override    
-    public boolean remove(int index) {
-        boolean b = super.remove(index);
-        checkIfScrollButtonsNecessary();
-        return b;    
-    }
-
-    @Override
-	protected void onLoad() {
-		super.onLoad();
-
-		if (windowResizeHandler == null) {
-			windowResizeHandler = Window.addResizeHandler(new ResizeHandler() {
-				public void onResize(ResizeEvent event) {
-					checkIfScrollButtonsNecessary();
-				}
-			});
-		}
-	}
-
-    @Override
-	protected void onUnload() {
-		super.onUnload();
-
-		if (windowResizeHandler != null) {
-			windowResizeHandler.removeHandler();
-			windowResizeHandler = null;
-		}
-	}
-    
-	private void enableScroll() {
-		if (!isScrollingEnabled) {
-	        scrollRight = new Image(images.scrollRight());
-			scrollLeft = new Image(images.scrollLeft());
-			scrollLeft.addClickHandler(createScrollClickHandler(ScrollLengh));
-			scrollRight.addClickHandler(createScrollClickHandler(-ScrollLengh));
-			
-			panel.setWidgetLeftRight(tabBar, 30, Unit.PX, 30, Unit.PX);
-			panel.setWidgetTopHeight(tabBar, 0, Unit.PX, barHeight, barUnit);
-			panel.setWidgetVerticalPosition(tabBar, Alignment.END);
-
-			panel.add(scrollRight);
-			panel.setWidgetRightWidth(scrollRight, 0, Unit.PX, 27, Unit.PX);
-			panel.setWidgetTopHeight(scrollRight, 0, Unit.PX, barHeight,
-					barUnit);
-			panel.setWidgetVerticalPosition(scrollRight, Alignment.END);
-
-			panel.add(scrollLeft);
-			panel.setWidgetLeftWidth(scrollLeft, 0, Unit.PX, 27, Unit.PX);
-			panel.setWidgetTopHeight(scrollLeft, 0, Unit.PX, barHeight, barUnit);
-			panel.setWidgetVerticalPosition(scrollLeft, Alignment.END);
-			
-			isScrollingEnabled = true;
-		}	
-	}
-
-	private void disableScroll() {
-		if (isScrollingEnabled) {
-			panel.remove(scrollRight);
-			panel.remove(scrollLeft);
-			
-			panel.setWidgetLeftRight(tabBar, 0, Unit.PX, 0, Unit.PX);
-			panel.setWidgetTopHeight(tabBar, 0, Unit.PX, barHeight, barUnit);
-			panel.setWidgetVerticalPosition(tabBar, Alignment.END);
-			
-			isScrollingEnabled = false;
-		}
-	}
-	
-	private void checkIfScrollButtonsNecessary() {
-		// Defer size calculations until sizes are available, when calculating
-		// immediately after add(), all size methods return zero
-		Scheduler.get().scheduleDeferred(new Scheduler.ScheduledCommand() {
-			public void execute() {				
-				 boolean isScrolling = isScrollingNecessary(); 
-				 if(isScrolling) {
-					 enableScroll();					 
-				 } else {
-					 disableScroll();
-				 }
-			}
-		});
-	}
-
-	private boolean isScrollingNecessary() {
-		Widget lastTab = getLastTab();
-		if (lastTab == null)
-			return false;
-
-		return getRightOfWidget(lastTab) > getTabBarWidth();
-	}
-	
-	private ClickHandler createScrollClickHandler(final int diff) {
-		return new ClickHandler() {
-			public void onClick(ClickEvent event) {
-				Widget lastTab = getLastTab();
-				if (lastTab == null)
-					return;
-
-				int newLeft = parsePosition(tabBar.getElement().getStyle().getLeft()) + diff;
-				int rightOfLastTab = getRightOfWidget(lastTab);
-
-				// Prevent scrolling the last tab too far away form the right
-				// border, or the first tab further than the left border position
-				if (newLeft <= 0
-						&& (getTabBarWidth() - newLeft < (rightOfLastTab + ScrollLengh))) {
-					scrollTo(newLeft);
-				}
-			}
-		};
-	}
-
-	private void scrollTo(int pos) {
-		tabBar.getElement().getStyle().setLeft(pos, Unit.PX);
-	}
-
-	private int getRightOfWidget(Widget widget) {
-		return widget.getElement().getOffsetLeft()
-				+ widget.getElement().getOffsetWidth();
-	}
-
-	private int getTabBarWidth() {
-		return tabBar.getElement().getParentElement().getClientWidth();
-	}
-
-	private Widget getLastTab() {
-		if (tabBar.getWidgetCount() == 0)
-			return null;
-
-		return tabBar.getWidget(tabBar.getWidgetCount() - 1);
-	}
-
-	private static int parsePosition(String positionString) {
-		int position;
-		try {
-			for (int i = 0; i < positionString.length(); i++) {
-				char c = positionString.charAt(i);
-				if (c != '-' && !(c >= '0' && c <= '9')) {
-					positionString = positionString.substring(0, i);
-				}
-			}
-
-			position = Integer.parseInt(positionString);
-		} catch (NumberFormatException ex) {
-			position = 0;
-		}
-		return position;
-	}	
-}

Copied: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/util/ScrollTabLayoutPanel.java (from rev 36238, labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/explorer/ScrollTabLayoutPanel.java)
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/util/ScrollTabLayoutPanel.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/util/ScrollTabLayoutPanel.java	2010-12-08 12:53:51 UTC (rev 36254)
@@ -0,0 +1,248 @@
+package org.drools.guvnor.client.util;
+
+import org.drools.guvnor.client.resources.Images;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.client.Scheduler;
+import com.google.gwt.dom.client.Style.Unit;
+import com.google.gwt.event.dom.client.ClickEvent;
+import com.google.gwt.event.dom.client.ClickHandler;
+import com.google.gwt.event.logical.shared.ResizeEvent;
+import com.google.gwt.event.logical.shared.ResizeHandler;
+import com.google.gwt.event.shared.HandlerRegistration;
+import com.google.gwt.layout.client.Layout.Alignment;
+import com.google.gwt.user.client.Window;
+import com.google.gwt.user.client.ui.FlowPanel;
+import com.google.gwt.user.client.ui.Image;
+import com.google.gwt.user.client.ui.LayoutPanel;
+import com.google.gwt.user.client.ui.TabLayoutPanel;
+import com.google.gwt.user.client.ui.Widget;
+
+public class ScrollTabLayoutPanel extends TabLayoutPanel {
+    private static Images       images             = GWT.create( Images.class );
+
+    private Image               scrollLeft;
+    private Image               scrollRight;
+    private FlowPanel           tabBar             = null;
+    private LayoutPanel         panel;
+    private static final int    ScrollLengh        = 100;
+
+    private double              barHeight;
+    private Unit                barUnit;
+    private boolean             isScrollingEnabled = false;
+
+    private HandlerRegistration windowResizeHandler;
+
+    public ScrollTabLayoutPanel(double barHeight,
+                                Unit barUnit) {
+        super( barHeight,
+               barUnit );
+        this.barHeight = barHeight;
+        this.barUnit = barUnit;
+        this.panel = (LayoutPanel) getWidget();
+
+        for ( int i = 0; i < panel.getWidgetCount(); ++i ) {
+            Widget widget = panel.getWidget( i );
+            if ( widget instanceof FlowPanel ) {
+                tabBar = (FlowPanel) widget;
+                break;
+            }
+        }
+    }
+
+    @Override
+    public void add(Widget child,
+                    Widget tab) {
+        super.add( child,
+                   tab );
+        checkIfScrollButtonsNecessary();
+    }
+
+    @Override
+    public boolean remove(Widget w) {
+        boolean b = super.remove( w );
+        checkIfScrollButtonsNecessary();
+        return b;
+    }
+
+    @Override
+    public boolean remove(int index) {
+        boolean b = super.remove( index );
+        checkIfScrollButtonsNecessary();
+        return b;
+    }
+
+    @Override
+    protected void onLoad() {
+        super.onLoad();
+
+        if ( windowResizeHandler == null ) {
+            windowResizeHandler = Window.addResizeHandler( new ResizeHandler() {
+                public void onResize(ResizeEvent event) {
+                    checkIfScrollButtonsNecessary();
+                }
+            } );
+        }
+    }
+
+    @Override
+    protected void onUnload() {
+        super.onUnload();
+
+        if ( windowResizeHandler != null ) {
+            windowResizeHandler.removeHandler();
+            windowResizeHandler = null;
+        }
+    }
+
+    private void enableScroll() {
+        if ( !isScrollingEnabled ) {
+            scrollRight = new Image( images.scrollRight() );
+            scrollLeft = new Image( images.scrollLeft() );
+            scrollLeft.addClickHandler( createScrollClickHandler( ScrollLengh ) );
+            scrollRight.addClickHandler( createScrollClickHandler( -ScrollLengh ) );
+
+            panel.setWidgetLeftRight( tabBar,
+                                      30,
+                                      Unit.PX,
+                                      30,
+                                      Unit.PX );
+            panel.setWidgetTopHeight( tabBar,
+                                      0,
+                                      Unit.PX,
+                                      barHeight,
+                                      barUnit );
+            panel.setWidgetVerticalPosition( tabBar,
+                                             Alignment.END );
+
+            panel.add( scrollRight );
+            panel.setWidgetRightWidth( scrollRight,
+                                       0,
+                                       Unit.PX,
+                                       27,
+                                       Unit.PX );
+            panel.setWidgetTopHeight( scrollRight,
+                                      0,
+                                      Unit.PX,
+                                      barHeight,
+                                      barUnit );
+            panel.setWidgetVerticalPosition( scrollRight,
+                                             Alignment.END );
+
+            panel.add( scrollLeft );
+            panel.setWidgetLeftWidth( scrollLeft,
+                                      0,
+                                      Unit.PX,
+                                      27,
+                                      Unit.PX );
+            panel.setWidgetTopHeight( scrollLeft,
+                                      0,
+                                      Unit.PX,
+                                      barHeight,
+                                      barUnit );
+            panel.setWidgetVerticalPosition( scrollLeft,
+                                             Alignment.END );
+
+            isScrollingEnabled = true;
+        }
+    }
+
+    private void disableScroll() {
+        if ( isScrollingEnabled ) {
+            panel.remove( scrollRight );
+            panel.remove( scrollLeft );
+
+            panel.setWidgetLeftRight( tabBar,
+                                      0,
+                                      Unit.PX,
+                                      0,
+                                      Unit.PX );
+            panel.setWidgetTopHeight( tabBar,
+                                      0,
+                                      Unit.PX,
+                                      barHeight,
+                                      barUnit );
+            panel.setWidgetVerticalPosition( tabBar,
+                                             Alignment.END );
+
+            isScrollingEnabled = false;
+        }
+    }
+
+    private void checkIfScrollButtonsNecessary() {
+        // Defer size calculations until sizes are available, when calculating
+        // immediately after add(), all size methods return zero
+        Scheduler.get().scheduleDeferred( new Scheduler.ScheduledCommand() {
+            public void execute() {
+                boolean isScrolling = isScrollingNecessary();
+                if ( isScrolling ) {
+                    enableScroll();
+                } else {
+                    disableScroll();
+                }
+            }
+        } );
+    }
+
+    private boolean isScrollingNecessary() {
+        Widget lastTab = getLastTab();
+        if ( lastTab == null ) return false;
+
+        return getRightOfWidget( lastTab ) > getTabBarWidth();
+    }
+
+    private ClickHandler createScrollClickHandler(final int diff) {
+        return new ClickHandler() {
+            public void onClick(ClickEvent event) {
+                Widget lastTab = getLastTab();
+                if ( lastTab == null ) return;
+
+                int newLeft = parsePosition( tabBar.getElement().getStyle().getLeft() ) + diff;
+                int rightOfLastTab = getRightOfWidget( lastTab );
+
+                // Prevent scrolling the last tab too far away form the right
+                // border, or the first tab further than the left border position
+                if ( newLeft <= 0 && (getTabBarWidth() - newLeft < (rightOfLastTab + ScrollLengh)) ) {
+                    scrollTo( newLeft );
+                }
+            }
+        };
+    }
+
+    private void scrollTo(int pos) {
+        tabBar.getElement().getStyle().setLeft( pos,
+                                                Unit.PX );
+    }
+
+    private int getRightOfWidget(Widget widget) {
+        return widget.getElement().getOffsetLeft() + widget.getElement().getOffsetWidth();
+    }
+
+    private int getTabBarWidth() {
+        return tabBar.getElement().getParentElement().getClientWidth();
+    }
+
+    private Widget getLastTab() {
+        if ( tabBar.getWidgetCount() == 0 ) return null;
+
+        return tabBar.getWidget( tabBar.getWidgetCount() - 1 );
+    }
+
+    private static int parsePosition(String positionString) {
+        int position;
+        try {
+            for ( int i = 0; i < positionString.length(); i++ ) {
+                char c = positionString.charAt( i );
+                if ( c != '-' && !(c >= '0' && c <= '9') ) {
+                    positionString = positionString.substring( 0,
+                                                               i );
+                }
+            }
+
+            position = Integer.parseInt( positionString );
+        } catch ( NumberFormatException ex ) {
+            position = 0;
+        }
+        return position;
+    }
+}



More information about the jboss-svn-commits mailing list