From 190617fcf996ee73e560349f71f96036c38ea8ee Mon Sep 17 00:00:00 2001 From: Lennart Hensler Date: Fri, 24 Jul 2015 15:05:39 +0200 Subject: [PATCH] Improved the tabbed results presenter --- .../controls/ScrolledTabLayoutPanel.java | 21 +++++++++++++++++ .../ui/datamining/DataMiningResources.java | 6 +++++ .../datamining/presentation/ResultsChart.java | 8 ++----- .../presentation/TabResultsPresenter.java | 22 ++++++++++-------- .../sailing/gwt/ui/client/images/close.png | Bin 1334 -> 363 bytes 5 files changed, 41 insertions(+), 16 deletions(-) diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/controls/ScrolledTabLayoutPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/controls/ScrolledTabLayoutPanel.java index 257542d6178..a57e024db6e 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/controls/ScrolledTabLayoutPanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/controls/ScrolledTabLayoutPanel.java @@ -192,6 +192,19 @@ public class ScrolledTabLayoutPanel extends TabLayoutPanel { }); } + + public void scrollToTab(int tabNumber) { + Widget tab = getTab(tabNumber); + if (tab == null) + return; + + int oldLeft = parsePosition(tabBar.getElement().getStyle().getLeft()); + int difference = getAbsoluteRightOfTabBar() - getAbsoluteRightOfWidget(tab) - SCROLL_RIGHT_TAB_MARGIN; + + // Prevent over-scrolling left border + int newLeft = Math.min(oldLeft + difference, 0); + scrollTo(oldLeft, newLeft); + } private void resetScrollPosition() { scrollTo(0, 0); @@ -259,6 +272,14 @@ public class ScrolledTabLayoutPanel extends TabLayoutPanel { return tabBar.getWidget(tabBar.getWidgetCount() - 1); } + private Widget getTab(int tabNumber) { + if (tabNumber < 0 || tabNumber >= tabBar.getWidgetCount()) { + return null; + } + + return tabBar.getWidget(tabNumber); + } + private Widget getFirstTab() { if (tabBar.getWidgetCount() == 0) return null; diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/DataMiningResources.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/DataMiningResources.java index 1d49bbbaf5d..905a7c03802 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/DataMiningResources.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/DataMiningResources.java @@ -8,4 +8,10 @@ public interface DataMiningResources extends ClientBundle { @Source("com/sap/sailing/gwt/ui/client/images/close.png") ImageResource closeIcon(); + @Source("com/sap/sailing/gwt/ui/client/images/arrow_left.png") + ImageResource arrowLeftIcon(); + + @Source("com/sap/sailing/gwt/ui/client/images/arrow_right.png") + ImageResource arrowRightIcon(); + } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/presentation/ResultsChart.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/presentation/ResultsChart.java index 6e3a905b1aa..dab37f0b240 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/presentation/ResultsChart.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/presentation/ResultsChart.java @@ -120,7 +120,8 @@ public class ResultsChart implements ResultsPresenter { presentationPanel = new ResizingSimplePanel() { @Override public void onResize() { - updateChartSize(); + chart.setSizeToMatchContainer(); + chart.redraw(); } }; mainPanel.add(presentationPanel); @@ -138,11 +139,6 @@ public class ResultsChart implements ResultsPresenter { showError(this.stringMessages.invalidSelection()); } - /*package*/ void updateChartSize() { - chart.setSizeToMatchContainer(); - chart.redraw(); - } - @Override public void showError(String error) { currentResult = null; diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/presentation/TabResultsPresenter.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/presentation/TabResultsPresenter.java index 5a7120d8a96..58d98a7510b 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/presentation/TabResultsPresenter.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/presentation/TabResultsPresenter.java @@ -7,9 +7,9 @@ import com.google.gwt.event.dom.client.ClickHandler; 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.TabLayoutPanel; import com.google.gwt.user.client.ui.Widget; import com.sap.sailing.gwt.ui.client.StringMessages; +import com.sap.sailing.gwt.ui.client.shared.controls.ScrolledTabLayoutPanel; import com.sap.sailing.gwt.ui.datamining.DataMiningResources; import com.sap.sailing.gwt.ui.datamining.ResultsPresenter; import com.sap.sse.datamining.shared.QueryResult; @@ -20,12 +20,12 @@ public class TabResultsPresenter implements ResultsPresenter { private final StringMessages stringMessages; - private final TabLayoutPanel tabPanel; + private final ScrolledTabLayoutPanel tabPanel; public TabResultsPresenter(StringMessages stringMessages) { this.stringMessages = stringMessages; - tabPanel = new TabLayoutPanel(20, Unit.PX); + tabPanel = new ScrolledTabLayoutPanel(30, Unit.PX, resources.arrowLeftIcon(), resources.arrowRightIcon()); tabPanel.setAnimationDuration(0); tabPanel.getElement().getStyle().setMarginTop(10, Unit.PX); } @@ -37,19 +37,19 @@ public class TabResultsPresenter implements ResultsPresenter { @Override public void showResult(QueryResult result) { - ResultsPresenter tabPresenter = addTabAndFocus(); + ResultsPresenter tabPresenter = addTabAndFocus(result.getResultSignifier()); tabPresenter.showResult(result); } @Override public void showError(String error) { - ResultsPresenter tabPresenter = addTabAndFocus(); + ResultsPresenter tabPresenter = addTabAndFocus(stringMessages.error()); tabPresenter.showError(error); } @Override public void showError(String mainError, Iterable detailedErrors) { - ResultsPresenter tabPresenter = addTabAndFocus(); + ResultsPresenter tabPresenter = addTabAndFocus(stringMessages.error()); tabPresenter.showError(mainError, detailedErrors); } @@ -58,12 +58,12 @@ public class TabResultsPresenter implements ResultsPresenter { // Do nothing here. A management of the different tabs is necessary to handle this. } - private ResultsPresenter addTabAndFocus() { - CloseableTabHeader tabHeader = new CloseableTabHeader("Test"); + private ResultsPresenter addTabAndFocus(String headerText) { + CloseableTabHeader tabHeader = new CloseableTabHeader(headerText); ResultsChart tabPresenter = new ResultsChart(stringMessages); tabPanel.add(tabPresenter.getWidget(), tabHeader.getWidget()); tabPanel.selectTab(tabPanel.getWidgetCount() - 1); - tabPresenter.updateChartSize(); + tabPanel.scrollToTab(tabPanel.getWidgetCount() - 1); return tabPresenter; } @@ -80,7 +80,9 @@ public class TabResultsPresenter implements ResultsPresenter { closeImage.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { - widget.removeFromParent(); + if (tabPanel.getWidgetCount() > 1) { + widget.removeFromParent(); + } } }); widget.add(closeImage); diff --git a/java/com.sap.sailing.gwt.ui/src/main/resources/com/sap/sailing/gwt/ui/client/images/close.png b/java/com.sap.sailing.gwt.ui/src/main/resources/com/sap/sailing/gwt/ui/client/images/close.png index 86749c782d6bb3a0e3b22dedbbf974b31029c6c8..aef98d78e6e80e2658a5956e206e6073252f626b 100644 GIT binary patch literal 363 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucL5ULAh?3y^w370~qEv>0#LT=By}Z;C1rt33 zJ=4@yqg0@pJDx6%Ar}5qCmZs$De$z)%G&g(mzEZMF!-++!@F@FF%LzS&WWF`o;5hGo#4Ac z>a5dchyLEw^^aG^InLg=`53S8&O>RFXP8a1-8L(vZO6d}U!}AUealWsp7Cbgg~NSu zrZZ-&pZ{qJZ;$7B&jk~o9ddZ6l-6|c*L_LL@79+;u=`y*8Y;H#(?Os=89ZJ6T-G@y GGywp2I+4Wy literal 1334 zcmbVMZEVzJ9Pj277?5ok2on-&hrt-``m)|j%g%Yb_SiA*IB%yri5ctKXS-(W3vIW% z4VB9_HSl5Jm>38N!+<)1Qxk)lMaME=*@qd)5{E*@MH6E(vv zp6CDke*gD>k3=K8*B3ukj3CJRP%RgOYnlD7egb}XDZBrMOS#1-ta`1*N(lx){F2rT z(2yduf*25_u7gvc3PB!A%JGDi2=8S@O>qh~#+g=h$VQN=>a;G1ZNNgCL949#u!Yev z43#Ax*5C>gVLbqna&5N(>boOxvAa!VB&_;*v?|R)1q!ePG_AC&CY$zQi+WkOx5YSy zE<&s}AC_|}5ssn(%>by&NjOBpO`>kvNzw#EGdod=APJnLaKhst3D)Id2@+j;Flfz? zTG$vDT(SjEJ}hZjI*a3}RLYsEbZSN`PBILG6BJHS4v27=U8*Id9jaN8*T4Z&G-Tb9 zH5Iir3e8%F<-?$-xeydR99~wenoEg-DZ|r(j+0ITR}?$0MYL(fz`t&+h&JP0I>2MV z)H)0i)}y5&PlmaBv>_V^y{JJtec3IW)9pspT%p3q|&0AM*KF z;m6tXFOlnGA$Mj=c8wQthm^J6LgVQzBLhR(vYQVk)<1bz4 z55DL4DZJ+wdcJG!i;C@`_qlHt<_EqSe6^tN)b!mm?}FjZ%+N>A7M}#=8(%A&^%({D zwL=RVDzklWd^UL{uxi|)Up#!zyC0RdRnvIp^`?fAD~UfoG_#T0%?EDJT}by1-@LO+ bxxb+a+4^#~aQe8U*nhGRAK^x7ntJ{L>)y~q