Alexander Wels has posted comments on this change. Change subject: userportal, webadmin: ScrollableTabBar ......................................................................
Patch Set 9: (48 comments) Addressed all of Vojtechs concerns. .................................................... File frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/presenter/ScrollableTabBarPresenterWidget.java Line 14: import com.gwtplatform.mvp.client.PresenterWidget; Line 15: import com.gwtplatform.mvp.client.View; Line 16: Line 17: /** Line 18: * Scroll-able tab widget that presents scrolling buttons when the window is not large enough to contain all the Done Line 19: * tabs. The scroll buttons allow the user to scroll so they can see tabs that they could not see otherwise. The Line 20: * widget also provide a drop down menu list of all the tabs. Line 21: */ Line 22: public class ScrollableTabBarPresenterWidget extends PresenterWidget<ScrollableTabBarPresenterWidget.ViewDef> Line 24: Line 25: /** Line 26: * View definition. Line 27: */ Line 28: public interface ViewDef extends View, TabWidgetHandler, IsWidget { Done Line 29: /** Line 30: * recalculate the needed sizes. Line 31: */ Line 32: void recalculateSize(); Line 37: /** Line 38: * Set the offset. Line 39: * @param left The offset in pixels. Line 40: */ Line 41: void setOffset(int left); Done Line 42: /** Line 43: * Set how many pixels the scroll panel should scroll when a button is clicked. Line 44: * @param scrollDistance The distance in pixels. Line 45: */ Line 86: resizeHandlerRegistration.removeHandler(); Line 87: } Line 88: } Line 89: })); Line 90: resizeHandlerRegistration = Window.addResizeHandler(new ResizeHandler() { Basically when you resize the window, the splitter generates the offset change event. So if this widget handled the offset change event as well as the resize event, it would have to do all the calculations twice, which is something I wanted to avoid. Unfortunately for a very short period of time I need to handle resize events (remove the resize handler and you will see what I mean, the initial load won't look right). Once the offset change event setup is working properly we can dispense with the resize handler. I put a comment in that hopefully explains this better. Line 91: @Override Line 92: public void onResize(ResizeEvent resizeEvent) { Line 93: getView().recalculateSize(); Line 94: getView().showScrollButtons(); .................................................... File frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/view/ScrollableTabBarView.java Line 21: import com.google.gwt.user.client.ui.PushButton; Line 22: import com.google.gwt.user.client.ui.Widget; Line 23: import com.google.inject.Inject; Line 24: Line 25: public class ScrollableTabBarView extends Composite implements ScrollableTabBarPresenterWidget.ViewDef { Switched to AbstractView and resorted to attach handler. Line 26: Line 27: public interface TabBarUiBinder extends UiBinder<Widget, ScrollableTabBarView> { Line 28: } Line 29: Line 23: import com.google.inject.Inject; Line 24: Line 25: public class ScrollableTabBarView extends Composite implements ScrollableTabBarPresenterWidget.ViewDef { Line 26: Line 27: public interface TabBarUiBinder extends UiBinder<Widget, ScrollableTabBarView> { Done Line 28: } Line 29: Line 30: /** Line 31: * element style name of 'min-width' that gets manipulated in the view. Line 46: Line 47: /** Line 48: * The CSS styles available to be modified inside the view. Line 49: */ Line 50: interface Style extends CssResource { That is correct, I am not a big fan of the huge application resources all over the place. Line 51: /** Line 52: * The style associated with each drop down item. Line 53: * Line 54: * @return The style name as a string regardless of obfuscation level. Line 52: * The style associated with each drop down item. Line 53: * Line 54: * @return The style name as a string regardless of obfuscation level. Line 55: */ Line 56: String dropdownItems(); Done Line 57: Line 58: /** Line 59: * The style of the outer item container. Line 60: * @return The style name as a string regardless of obfuscation level. Line 124: * Line 125: * @param binder The UI-binder definition used to instantiate the widget. Line 126: */ Line 127: @Inject Line 128: public ScrollableTabBarView(final TabBarUiBinder binder) { Done Line 129: initWidget(binder.createAndBindUi(this)); Line 130: configureAutoHidePartners(); Line 131: } Line 132: Line 138: } Line 139: Line 140: @Override Line 141: public void addTabWidget(IsWidget tabWidget, int index) { Line 142: Widget listWidget = copyWidget(tabWidget); I needed a generic way to get the tabs into the drop down, this did the trick without knowing a lot about the originals. Line 143: if (listWidget != null) { Line 144: widgetBar.insert(tabWidget, index); Line 145: dropdownPanel.insert(listWidget, index); Line 146: } Line 144: widgetBar.insert(tabWidget, index); Line 145: dropdownPanel.insert(listWidget, index); Line 146: } Line 147: recalculateWidgetBarMinWidth(); Line 148: showScrollButtons(); Done Line 149: } Line 150: Line 151: @Override Line 152: public void removeTabWidget(IsWidget tabWidget) { Line 149: } Line 150: Line 151: @Override Line 152: public void removeTabWidget(IsWidget tabWidget) { Line 153: widgetBar.remove(tabWidget); Yes, we do, I forgot to add the code to do that as it is not trivial to determine which one to remove. Line 154: recalculateWidgetBarMinWidth(); Line 155: showScrollButtons(); Line 156: } Line 157: Line 155: showScrollButtons(); Line 156: } Line 157: Line 158: /** Line 159: * Copy the passed in widget WITHOUT the event handlers. Then add a click handler to the new widget Done Line 160: * and add the 'dropdownItems' style to them. Also left align the text in the widget as it is now part Line 161: * of a list and it looks strange not being left aligned. Line 162: * Line 163: * @param widget The original widget, which is unchanged after this call. Line 162: * Line 163: * @param widget The original widget, which is unchanged after this call. Line 164: * @return The new widget with click handler and dropdownItems style. Line 165: */ Line 166: private Widget copyWidget(final IsWidget widget) { Done Line 167: HTML newWidget = null; Line 168: if (widget != null) { Line 169: newWidget = new HTML(); Line 170: newWidget.setHTML(widget.asWidget().getElement().getString().replaceAll("class=\".*?\"", //$NON-NLS-1$ Line 198: * Calculate the minimum width needed to display all the tabs on the bar. This works even if there are some Line 199: * right floating tabs. Line 200: */ Line 201: private void recalculateWidgetBarMinWidth() { Line 202: // Add 1 for browsers that don't report width properly. It does, but not significantly. Basically the switch to showing the scrollable buttons happens one pixel earlier than strictly necessary, I haven't noticed that being a problem in regular usage. Line 203: widgetBar.getElement().getStyle().setProperty(MIN_WIDTH_STYLE, calculateWidgetMinWidthNeeded() + 1, Unit.PX); Line 204: } Line 205: Line 206: /** Line 328: */ Line 329: private boolean isScrollingNecessary() { Line 330: int currentWidth = asWidget().getOffsetWidth(); Line 331: int minWidth = getWidgetMinWidthNeeded(); Line 332: return minWidth > 0 && currentWidth > 0 && currentWidth <= minWidth + 1; You are right, I fixed it. Line 333: } Line 334: Line 335: /** Line 336: * Adjust the scroll by a number of pixels. The value can be positive or negative. Line 395: showScrollButtons(); Line 396: } Line 397: Line 398: @Override Line 399: public void addToSlot(Object slot, IsWidget content) { Not if we extend from AbstractView. Line 400: recalculateSize(); Line 401: } Line 402: Line 403: @Override .................................................... File frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/action/AbstractActionPanel.java Line 95: private final FlowPanel contentPanel; Line 96: Line 97: // List of action buttons managed by this action panel Line 98: private final List<ActionButtonDefinition<T>> actionButtonList = new ArrayList<ActionButtonDefinition<T>>(); Line 99: // List of buttons in the tool-bar. Action button list relates to the context menu, the action toolbar button list is the menu. They are two different sets of definitions and do overlap somewhat but some items in the context menu don't exist in the toolbar and vice versa. I will see I can name them more appropriately. Line 100: private final List<ActionButtonDefinition<T>> actionToolbarButtonList = new ArrayList<ActionButtonDefinition<T>>(); Line 101: Line 102: private final SearchableModelProvider<T, ?> dataProvider; Line 103: private final EventBus eventBus; Line 140: * Constructor. Line 141: * @param modelProvider The data provider. Line 142: * @param gwtEventBus The GWT event bus. Line 143: */ Line 144: public AbstractActionPanel(SearchableModelProvider<T, ?> modelProvider, EventBus gwtEventBus) { Done Line 145: this.dataProvider = modelProvider; Line 146: this.eventBus = gwtEventBus; Line 147: contextPopupPanel = new PopupPanel(true); Line 148: contextMenuBar = new MenuBar(true); Line 190: } Line 191: initializeCascadeMenuPanel(); Line 192: } Line 193: }); Line 194: resizeHandlerRegistration = Window.addResizeHandler(new ResizeHandler() { See my explanation in the other file. Line 195: @Override Line 196: public void onResize(ResizeEvent resizeEvent) { Line 197: initializeCascadeMenuPanel(); Line 198: } Line 239: boolean foundEdge = false; Line 240: if (contentPanel.getWidgetCount() > 1) { Line 241: for (int i = 0; i < contentPanel.getWidgetCount() - 1; i++) { Line 242: Widget widget = contentPanel.getWidget(i); Line 243: widget.setVisible(true); //temporarily show the widget, so we get the actual width of the widget. I don't think it will, as this executes after the button definitions have been passed in, and therefore all the visible buttons are right. Definitely something to test with users with fewer permissions. Line 244: if (foundEdge || (widgetWidth + widget.getOffsetWidth() > currentWidth)) { Line 245: widget.setVisible(false); Line 246: actionToolbarButtonList.get(i).setCascaded(true); Line 247: foundEdge = true; Line 298: // Add the button to the action panel Line 299: if (buttonDef.getCommandLocation().equals(CommandLocation.ContextAndToolBar) Line 300: || buttonDef.getCommandLocation().equals(CommandLocation.OnlyFromToolBar)) { Line 301: copyStyleToCascadeButton(newActionButton); Line 302: contentPanel.insert(newActionButton.asWidget(), contentPanel.getWidgetCount() - 1); That is correct Line 303: actionToolbarButtonList.add(buttonDef); Line 304: } Line 305: Line 306: // Add the button to the context menu Line 361: * Calculate the width of all the sibling widgets to this widget (this is for the case where there are extra Line 362: * buttons and other things on the same row).<br /> Line 363: * <br /> Line 364: * <b>NOTE</b> This calculation breaks down if the siblings have left or/and right margins. The reported width Line 365: * is inaccurate if margins exist. Yes, I have had to modify some of the css to change the margins into padding. Line 366: * @return The total width of all the sibling widgets in pixels. Line 367: */ Line 368: private int calculateSiblingWidth() { Line 369: int width = 0; Line 367: */ Line 368: private int calculateSiblingWidth() { Line 369: int width = 0; Line 370: Widget parent = actionPanel.getParent(); Line 371: if (parent != null && parent instanceof HasWidgets) { Done Line 372: Iterator<Widget> widgetIterator = ((HasWidgets) parent).iterator(); Line 373: while (widgetIterator.hasNext()) { Line 374: Widget widget = widgetIterator.next(); Line 375: if (widget != actionPanel) { Line 411: String styleString = ((Widget) newActionButton).getStyleName(); Line 412: if (styleString != null) { Line 413: String[] stylesArray = styleString.split(" "); //$NON-NLS-1$ Line 414: for (String singleStyle : stylesArray) { Line 415: if (!singleStyle.startsWith(GWT_PREFIX)) { I don't know the styling of the buttons ahead of time, and we want to make the items in the menu look like the action buttons. Line 416: cascadeButton.addStyleName(singleStyle); Line 417: } Line 418: } Line 419: } Line 583: * @param buttonDef The {@code ActionButtonDefinition} used to determine the new state of the button. Line 584: */ Line 585: void updateActionButton(ActionButton button, ActionButtonDefinition<T> buttonDef) { Line 586: button.asWidget().setVisible(buttonDef.isAccessible(getSelectedItems()) Line 587: && buttonDef.isVisible(getSelectedItems()) && !buttonDef.isCascaded()); Same answer as above, the one set is not identical to the other, one contains context menu items, the other does not. Line 588: button.setEnabled(buttonDef.isEnabled(getSelectedItems())); Line 589: button.setTitle(buttonDef.getButtonToolTip() != null ? buttonDef.getButtonToolTip() : buttonDef.getTitle()); Line 590: } Line 591: .................................................... File frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/tab/AbstractHeadlessTabPanel.java Line 16: this.tabWidgetHandler = tabWidgetHandler; Line 17: } Line 18: Line 19: @Override Line 20: public void addTabWidget(IsWidget tabWidget, int index) { Well I had no choice, but definitely an improvement. Line 21: if (tabWidgetHandler != null) { Line 22: tabWidgetHandler.addTabWidget(tabWidget, index); Line 23: } Line 24: } .................................................... File frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/tab/ModelBoundTab.java Line 13: import com.google.gwt.event.shared.GwtEvent; Line 14: import com.google.gwt.event.shared.HasHandlers; Line 15: Line 16: public class ModelBoundTab extends SimpleTab implements HasHandlers { Line 17: final EventBus eventBus; Done Line 18: Line 19: public ModelBoundTab(final ModelBoundTabData tabData, AbstractTabPanel tabPanel, EventBus eventBus) { Line 20: super(tabData, tabPanel); Line 21: setAlign(tabData.getAlign()); Line 47: // Update tab accessibility when 'IsAvailable' property changes Line 48: if ("IsAvailable".equals(pcArgs.propertyName)) { //$NON-NLS-1$ Line 49: boolean isAvailable = modelProvider.getModel().getIsAvailable(); Line 50: setAccessible(isAvailable); Line 51: TabAccessibleChangeEvent.fire(ModelBoundTab.this, ModelBoundTab.this); Done Line 52: } Line 53: } Line 54: }); Line 55: } .................................................... File frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/tab/RepeatingPushButton.java Line 16: /** Line 17: * The constructor Line 18: */ Line 19: public RepeatingPushButton() { Line 20: super(); In this particular case since I am extending a GWT class, I wanted to explicitly call super. You are right it is a matter of taste. Line 21: timer = new Timer() { Line 22: @Override Line 23: public void run() { Line 24: RepeatingPushButton.super.onClick(); .................................................... File frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/presenter/tab/extended/template/ExtendedTemplateSubTabPanelPresenter.java Line 26: @ProxyCodeSplit Line 27: public interface ProxyDef extends Proxy<ExtendedTemplateSubTabPanelPresenter> { Line 28: } Line 29: Line 30: public interface ViewDef extends TabView, HasUiHandlers<TabWidgetHandler> { I knew you would figure out a better way of doing this :) Line 31: } Line 32: Line 33: @RequestTabs Line 34: public static final Type<RequestTabsHandler> TYPE_RequestTabs = new Type<RequestTabsHandler>(); .................................................... File frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/presenter/tab/extended/vm/ExtendedVmSubTabPanelPresenter.java Line 25: @ProxyCodeSplit Line 26: public interface ProxyDef extends Proxy<ExtendedVmSubTabPanelPresenter> { Line 27: } Line 28: Line 29: public interface ViewDef extends TabView, HasUiHandlers<TabWidgetHandler> { Done Line 30: } Line 31: Line 32: @RequestTabs Line 33: public static final Type<RequestTabsHandler> TYPE_RequestTabs = new Type<RequestTabsHandler>(); .................................................... File frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/view/AbstractSubTabPanelView.java Line 11: Line 12: public abstract class AbstractSubTabPanelView extends AbstractTabPanelView implements HasUiHandlers<TabWidgetHandler> { Line 13: Line 14: protected void setTabBar(IsWidget content) { Line 15: ((SimpleTabPanel) getTabPanel()).setTabBar(content); I don't think I can tighten the contract as other things can sub class AbstractTabPanelView which may or may not return a SimpleTabPanel. I have implemented the instanceof check. Line 16: } Line 17: Line 18: @Override Line 19: public void setInSlot(Object slot, IsWidget content) { .................................................... File frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/cluster/ClusterSubTabPanelPresenter.java Line 24: @ProxyCodeSplit Line 25: public interface ProxyDef extends Proxy<ClusterSubTabPanelPresenter> { Line 26: } Line 27: Line 28: public interface ViewDef extends TabView, DynamicTabPanel, HasUiHandlers<TabWidgetHandler> { Done Line 29: } Line 30: Line 31: @RequestTabs Line 32: public static final Type<RequestTabsHandler> TYPE_RequestTabs = new Type<RequestTabsHandler>(); .................................................... File frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/datacenter/DataCenterSubTabPanelPresenter.java Line 24: @ProxyCodeSplit Line 25: public interface ProxyDef extends Proxy<DataCenterSubTabPanelPresenter> { Line 26: } Line 27: Line 28: public interface ViewDef extends TabView, DynamicTabPanel, HasUiHandlers<TabWidgetHandler> { Done Line 29: } Line 30: Line 31: @RequestTabs Line 32: public static final Type<RequestTabsHandler> TYPE_RequestTabs = new Type<RequestTabsHandler>(); .................................................... File frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/disk/DiskSubTabPanelPresenter.java Line 24: @ProxyCodeSplit Line 25: public interface ProxyDef extends Proxy<DiskSubTabPanelPresenter> { Line 26: } Line 27: Line 28: public interface ViewDef extends TabView, DynamicTabPanel, HasUiHandlers<TabWidgetHandler> { Done Line 29: } Line 30: Line 31: @RequestTabs Line 32: public static final Type<RequestTabsHandler> TYPE_RequestTabs = new Type<RequestTabsHandler>(); .................................................... File frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/gluster/VolumeSubTabPanelPresenter.java Line 24: @ProxyCodeSplit Line 25: public interface ProxyDef extends Proxy<VolumeSubTabPanelPresenter> { Line 26: } Line 27: Line 28: public interface ViewDef extends TabView, DynamicTabPanel, HasUiHandlers<TabWidgetHandler> { Done Line 29: } Line 30: Line 31: @RequestTabs Line 32: public static final Type<RequestTabsHandler> TYPE_RequestTabs = new Type<RequestTabsHandler>(); .................................................... File frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/host/HostSubTabPanelPresenter.java Line 24: @ProxyCodeSplit Line 25: public interface ProxyDef extends Proxy<HostSubTabPanelPresenter> { Line 26: } Line 27: Line 28: public interface ViewDef extends TabView, DynamicTabPanel, HasUiHandlers<TabWidgetHandler> { Done Line 29: } Line 30: Line 31: @RequestTabs Line 32: public static final Type<RequestTabsHandler> TYPE_RequestTabs = new Type<RequestTabsHandler>(); .................................................... File frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/network/NetworkSubTabPanelPresenter.java Line 24: @ProxyCodeSplit Line 25: public interface ProxyDef extends Proxy<NetworkSubTabPanelPresenter> { Line 26: } Line 27: Line 28: public interface ViewDef extends TabView, DynamicTabPanel, HasUiHandlers<TabWidgetHandler> { Done Line 29: } Line 30: Line 31: @RequestTabs Line 32: public static final Type<RequestTabsHandler> TYPE_RequestTabs = new Type<RequestTabsHandler>(); .................................................... File frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/pool/PoolSubTabPanelPresenter.java Line 24: @ProxyCodeSplit Line 25: public interface ProxyDef extends Proxy<PoolSubTabPanelPresenter> { Line 26: } Line 27: Line 28: public interface ViewDef extends TabView, DynamicTabPanel, HasUiHandlers<TabWidgetHandler> { Done Line 29: } Line 30: Line 31: @RequestTabs Line 32: public static final Type<RequestTabsHandler> TYPE_RequestTabs = new Type<RequestTabsHandler>(); .................................................... File frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/profile/VnicProfileSubTabPanelPresenter.java Line 24: @ProxyCodeSplit Line 25: public interface ProxyDef extends Proxy<VnicProfileSubTabPanelPresenter> { Line 26: } Line 27: Line 28: public interface ViewDef extends TabView, DynamicTabPanel, HasUiHandlers<TabWidgetHandler> { Done Line 29: } Line 30: Line 31: @RequestTabs Line 32: public static final Type<RequestTabsHandler> TYPE_RequestTabs = new Type<RequestTabsHandler>(); .................................................... File frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/provider/ProviderSubTabPanelPresenter.java Line 24: @ProxyCodeSplit Line 25: public interface ProxyDef extends Proxy<ProviderSubTabPanelPresenter> { Line 26: } Line 27: Line 28: public interface ViewDef extends TabView, DynamicTabPanel, HasUiHandlers<TabWidgetHandler> { Done Line 29: } Line 30: Line 31: @RequestTabs Line 32: public static final Type<RequestTabsHandler> TYPE_RequestTabs = new Type<RequestTabsHandler>(); .................................................... File frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/quota/QuotaSubTabPanelPresenter.java Line 24: @ProxyCodeSplit Line 25: public interface ProxyDef extends Proxy<QuotaSubTabPanelPresenter> { Line 26: } Line 27: Line 28: public interface ViewDef extends TabView, DynamicTabPanel, HasUiHandlers<TabWidgetHandler> { Done Line 29: } Line 30: Line 31: @RequestTabs Line 32: public static final Type<RequestTabsHandler> TYPE_RequestTabs = new Type<RequestTabsHandler>(); .................................................... File frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/storage/StorageSubTabPanelPresenter.java Line 24: @ProxyCodeSplit Line 25: public interface ProxyDef extends Proxy<StorageSubTabPanelPresenter> { Line 26: } Line 27: Line 28: public interface ViewDef extends TabView, DynamicTabPanel, HasUiHandlers<TabWidgetHandler> { Done Line 29: } Line 30: Line 31: @RequestTabs Line 32: public static final Type<RequestTabsHandler> TYPE_RequestTabs = new Type<RequestTabsHandler>(); .................................................... File frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/template/TemplateSubTabPanelPresenter.java Line 24: @ProxyCodeSplit Line 25: public interface ProxyDef extends Proxy<TemplateSubTabPanelPresenter> { Line 26: } Line 27: Line 28: public interface ViewDef extends TabView, DynamicTabPanel, HasUiHandlers<TabWidgetHandler> { Done Line 29: } Line 30: Line 31: @RequestTabs Line 32: public static final Type<RequestTabsHandler> TYPE_RequestTabs = new Type<RequestTabsHandler>(); .................................................... File frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/user/UserSubTabPanelPresenter.java Line 24: @ProxyCodeSplit Line 25: public interface ProxyDef extends Proxy<UserSubTabPanelPresenter> { Line 26: } Line 27: Line 28: public interface ViewDef extends TabView, DynamicTabPanel, HasUiHandlers<TabWidgetHandler> { Done Line 29: } Line 30: Line 31: @RequestTabs Line 32: public static final Type<RequestTabsHandler> TYPE_RequestTabs = new Type<RequestTabsHandler>(); .................................................... File frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/virtualMachine/VirtualMachineSubTabPanelPresenter.java Line 24: @ProxyCodeSplit Line 25: public interface ProxyDef extends Proxy<VirtualMachineSubTabPanelPresenter> { Line 26: } Line 27: Line 28: public interface ViewDef extends TabView, DynamicTabPanel, HasUiHandlers<TabWidgetHandler> { Done Line 29: } Line 30: Line 31: @RequestTabs Line 32: public static final Type<RequestTabsHandler> TYPE_RequestTabs = new Type<RequestTabsHandler>(); .................................................... File frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/AbstractSubTabPanelView.java Line 11: Line 12: public abstract class AbstractSubTabPanelView extends AbstractTabPanelView implements HasUiHandlers<TabWidgetHandler> { Line 13: Line 14: protected void setTabBar(IsWidget content) { Line 15: ((SimpleTabPanel) getTabPanel()).setTabBar(content); Same response. Line 16: } Line 17: Line 18: @Override Line 19: public void setInSlot(Object slot, IsWidget content) { -- To view, visit http://gerrit.ovirt.org/21716 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: comment Gerrit-Change-Id: I63dddb3c0026ea3a5c13c3d18daebd02e13b1043 Gerrit-PatchSet: 9 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Alexander Wels <aw...@redhat.com> Gerrit-Reviewer: Alexander Wels <aw...@redhat.com> Gerrit-Reviewer: Einav Cohen <eco...@redhat.com> Gerrit-Reviewer: Greg Sheremeta <gsher...@redhat.com> Gerrit-Reviewer: Vojtech Szocs <vsz...@redhat.com> Gerrit-Reviewer: oVirt Jenkins CI Server Gerrit-HasComments: Yes _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches