From b39f10aee376c5b859a505fbe4b530be9790f927 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Johannes=20Dahlstr=C3=B6m?= Date: Mon, 2 Apr 2012 13:35:44 +0000 Subject: [PATCH] Reverted accidental commit svn changeset:23384/svn branch:6.8 --- .../terminal/gwt/client/ui/VTabsheet.java | 120 +++++++----------- 1 file changed, 43 insertions(+), 77 deletions(-) diff --git a/src/com/vaadin/terminal/gwt/client/ui/VTabsheet.java b/src/com/vaadin/terminal/gwt/client/ui/VTabsheet.java index 918ab19173..b77203532f 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/VTabsheet.java +++ b/src/com/vaadin/terminal/gwt/client/ui/VTabsheet.java @@ -414,10 +414,6 @@ public class VTabsheet extends VTabsheetBase implements Focusable, public void onClick(ClickEvent event) { Widget caption = (Widget) event.getSource(); int index = getWidgetIndex(caption.getParent()); - // IE needs explicit focus() - if (BrowserInfo.get().isIE()) { - getTabsheet().focus(); - } getTabsheet().onTabSelected(index); } @@ -598,20 +594,18 @@ public class VTabsheet extends VTabsheetBase implements Focusable, * @return Whether the tab could be selected or not. */ private boolean onTabSelected(final int tabIndex) { - Tab tab = tb.getTab(tabIndex); - if (client == null || disabled || waitingForResponse) { + if (disabled || waitingForResponse) { return false; } - if (!tab.isEnabledOnServer() || tab.isHiddenOnServer()) { + final Object tabKey = tabKeys.get(tabIndex); + if (disabledTabKeys.contains(tabKey)) { return false; } - if (activeTabIndex != tabIndex) { + if (client != null && activeTabIndex != tabIndex) { tb.selectTab(tabIndex); - // If this TabSheet already has focus, set the new selected tab - // as focused. if (focusedTab != null) { - focusedTab = tab; + focusedTab = tb.getTab(tabIndex); } addStyleDependentName("loading"); @@ -628,10 +622,10 @@ public class VTabsheet extends VTabsheetBase implements Focusable, } }); waitingForResponse = true; + + return true; } - // Note that we return true when tabIndex == activeTabIndex; the active - // tab could be selected, it's just a no-op. - return true; + return false; } public ApplicationConnection getApplicationConnection() { @@ -1202,11 +1196,6 @@ public class VTabsheet extends VTabsheetBase implements Focusable, - (isScrolledTabs() ? scroller.getOffsetWidth() : 0); } - private boolean isClipped(Tab tab) { - return tab.getAbsoluteLeft() + tab.getOffsetWidth() > getAbsoluteLeft() - + getOffsetWidth() - scroller.getOffsetWidth(); - } - @Override protected void clearPaintables() { @@ -1345,83 +1334,60 @@ public class VTabsheet extends VTabsheetBase implements Focusable, int keycode = event.getNativeEvent().getKeyCode(); if (keycode == getPreviousTabKey()) { - selectPreviousTab(); + int newTabIndex = activeTabIndex; + // Find the previous non-disabled tab with wraparound. + do { + newTabIndex = (newTabIndex != 0) ? newTabIndex - 1 : tb + .getTabCount() - 1; + } while (newTabIndex != activeTabIndex + && !onTabSelected(newTabIndex)); + activeTabIndex = newTabIndex; + + // Tab scrolling + if (isScrolledTabs()) { + int newFirstIndex = tb.scrollLeft(scrollerIndex); + if (newFirstIndex != -1) { + scrollerIndex = newFirstIndex; + updateTabScroller(); + } + } + } else if (keycode == getNextTabKey()) { - selectNextTab(); + int newTabIndex = activeTabIndex; + // Find the next non-disabled tab with wraparound. + do { + newTabIndex = (newTabIndex + 1) % tb.getTabCount(); + } while (newTabIndex != activeTabIndex + && !onTabSelected(newTabIndex)); + activeTabIndex = newTabIndex; + + if (isClippedTabs()) { + int newFirstIndex = tb.scrollRight(scrollerIndex); + if (newFirstIndex != -1) { + scrollerIndex = newFirstIndex; + updateTabScroller(); + } + } + } else if (keycode == getCloseTabKey()) { Tab tab = tb.getTab(activeTabIndex); if (tab.isClosable()) { tab.onClose(); + removeTab(activeTabIndex); } } } } - /** - * @return The key code of the keyboard shortcut that selects the previous - * tab in a focused tabsheet. - */ protected int getPreviousTabKey() { return KeyCodes.KEY_LEFT; } - /** - * @return The key code of the keyboard shortcut that selects the next tab - * in a focused tabsheet. - */ protected int getNextTabKey() { return KeyCodes.KEY_RIGHT; } - /** - * @return The key code of the keyboard shortcut that closes the currently - * selected tab in a focused tabsheet. - */ protected int getCloseTabKey() { return KeyCodes.KEY_DELETE; } - - private void selectPreviousTab() { - int newTabIndex = activeTabIndex; - // Find the previous visible and enabled tab if any. - do { - newTabIndex--; - } while (newTabIndex >= 0 && !onTabSelected(newTabIndex)); - - if (newTabIndex >= 0) { - activeTabIndex = newTabIndex; - if (isScrolledTabs()) { - // Scroll until the new active tab is visible - int newScrollerIndex = scrollerIndex; - while (tb.getTab(activeTabIndex).getAbsoluteLeft() < getAbsoluteLeft() - && newScrollerIndex != -1) { - newScrollerIndex = tb.scrollLeft(newScrollerIndex); - } - scrollerIndex = newScrollerIndex; - updateTabScroller(); - } - } - } - - private void selectNextTab() { - int newTabIndex = activeTabIndex; - // Find the next visible and enabled tab if any. - do { - newTabIndex++; - } while (newTabIndex < getTabCount() && !onTabSelected(newTabIndex)); - - if (newTabIndex < getTabCount()) { - activeTabIndex = newTabIndex; - if (isClippedTabs()) { - // Scroll until the new active tab is completely visible - int newScrollerIndex = scrollerIndex; - while (isClipped(tb.getTab(activeTabIndex)) - && newScrollerIndex != -1) { - newScrollerIndex = tb.scrollRight(newScrollerIndex); - } - scrollerIndex = newScrollerIndex; - updateTabScroller(); - } - } - } } -- 2.39.5