Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Copyright 2012 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.uberfire.client.common;
 
 
 public class MultiPageEditorView
         extends Composite
         implements RequiresResize {
 
     private static final int MARGIN = 20;
 
     final TabPanel tabPanel;
 
     private int maxDropdownTabLinkWidth = 0;
     private boolean alreadyScheduled = false;
 
     public MultiPageEditorView() {
         this.. );
     }
 
     public MultiPageEditorViewfinal MultiPageEditor.TabPosition tabPosition ) {
          = new TabPanel() {{
             setTabPositiontabPosition.getPosition() );
 
             addShownHandlernew TabPanel.ShownEvent.Handler() {
                 @Override
                 public void onShowfinal TabPanel.ShownEvent e ) {
                     try {
                         ( (Page.PageView) ( (LayoutPanele.getRelatedTarget().getTabPane().getWidget( 0 ) ).getWidget( 0 ) ).onLostFocus();
                     } catch ( final Exception ex ) {
                     }
                 }
             } );
 
             addShowHandlernew TabPanel.ShowEvent.Handler() {
                 @Override
                 public void onShowfinal TabPanel.ShowEvent e ) {
                     final Page.PageView widget = ( (Page.PageView) ( (LayoutPanele.getTarget().getTabPane().getWidget( 0 ) ).getWidget( 0 ) );
                     scheduleResizewidget );
                     widget.onFocus();
                 }
             } );
         }};
 
         initWidget );
     }
 
     protected void scheduleResizefinal Widget widget ) {
         if ( widget instanceof RequiresResize ) {
             final RequiresResize requiresResize = (RequiresResizewidget;
             Scheduler.get().scheduleDeferrednew Scheduler.ScheduledCommand() {
 
                 @Override
                 public void execute() {
                     requiresResize.onResize();
                 }
             } );
         }
     }
 
     public void addPagefinal Page page ) {
         final Tab tab = createTabpage.getLabel(), page.getView(), false, 0, 0 );
 
         .addtab );
 
         if ( getTabs().getWidgetCount() == 1 ) {
             .selectTab( 0 );
         }
 
        Scheduler.get().scheduleDeferrednew Scheduler.ScheduledCommand() {
            @Override
            public void execute() {
                onResize();
            }
        } );
    }
    public void selectPageint index ) {
        .selectTabindex );
    }
    public void clear() {
        .clear();
    }
    public void shrinkTabBar() {
        final Widget lastTab = getLastTab();
        if ( lastTab instanceof TabLink ) {
             = 0;
            final TabLink tab = (TabLinklastTab;
            final DropdownTab dropdown = new DropdownTab..More() ) {{
                setDropuptrue );
            }};
            final Tab clonedTab = cloneTabtabfalsetrue );
            if ( clonedTab.isActive() ) {
                dropdown.setText..Active()+" " + clonedTab.asTabLink().getText() );
                dropdown.addStyleName. );
            }
            dropdown.addclonedTab );
            .adddropdown );
            .removetab );
            scheduleResize();
        } else if ( lastTab instanceof DropdownTab ) {
            final TabLink lastTabLink = (TabLinkgetBeforeLastTab();
            if ( lastTabLink == null ) {
                return;
            }
            final Tab clonedTab = cloneTablastTabLinkfalsetrue );
            final DropdownTab dropdown = cloneDropdown( (DropdownTablastTab, -1 );
            if ( clonedTab.isActive() ) {
                dropdown.setText..Active()+" " + clonedTab.asTabLink().getText() );
                dropdown.addStyleName. );
            }
            dropdown.addclonedTab );
            .adddropdown );
            .removelastTabLink );
            .removelastTab );
            scheduleResize();
        }
    }
    private void scheduleResize() {
        if (  ) {
            return;
        }
         = true;
        Scheduler.get().scheduleDeferrednew Scheduler.ScheduledCommand() {
            @Override
            public void execute() {
                onResize();
                 = false;
            }
        } );
    }
    public void expandTabBar() {
        final DropdownTab dropdown = (DropdownTabgetLastTab();
        int index = dropdown.getTabList().size() - 1;
        final TabLink tab = dropdown.getTabList().getindex ).asTabLink();
        final Tab newTab = cloneTabtabtruefalse );
        .addnewTab );
        if ( dropdown.getTabList().size() > 2 ) {
            .addcloneDropdowndropdownindex ) );
        } else if ( dropdown.getTabList().size() == 2 ) {
            final TabLink _tab = dropdown.getTabList().getindex - 1 ).asTabLink();
            .addcloneTab_tabtruefalse ) );
             = 0;
        }
        .removedropdown );
        scheduleResize();
    }
    public Tab createTabfinal String label,
                          final IsWidget widget,
                          final boolean isActive,
                          final int width,
                          final int height ) {
        final Tab tab = new Tab() {{
            setHeadinglabel );
            setActiveisActive );
        }};
        tab.addClickHandlernew ClickHandler() {
            @Override
            public void onClickfinal ClickEvent event ) {
                if ( tab.asTabLink().getParent().getParent() instanceof DropdownTab ) {
                    final DropdownTab dropdownTab = (DropdownTabtab.asTabLink().getParent().getParent();
                    dropdownTab.setText..Active()+" " + label );
                    dropdownTab.addStyleName. );
                } else {
                    final Widget lastTab = getLastTab();
                    if ( lastTab instanceof DropdownTab ) {
                        ( (DropdownTablastTab ).setText..More() );
                    }
                }
            }
        } );
        final LayoutPanel flowPanel = new LayoutPanel() {{
            addwidget );
            setPixelSizewidthheight );
        }};
        tab.addflowPanel );
        Scheduler.get().scheduleDeferrednew Scheduler.ScheduledCommand() {
            @Override
            public void execute() {
                if ( MultiPageEditorView.this.getParent() != null ) {
                    flowPanel.setPixelSizeMultiPageEditorView.this.getParent().getOffsetWidth(),
                                            MultiPageEditorView.this.getParent().getOffsetHeight() - getTabHeight() );
                }
            }
        } );
        return tab;
    }
    public Tab cloneTabfinal TabLink tabLink,
                         final boolean fromDropdown,
                         final boolean toDropdown ) {
        final String heading = tabLink.getText();
        final Widget content = ( (ComplexPaneltabLink.getTabPane().getWidget( 0 ) ).getWidget( 0 );
        if ( !fromDropdown && toDropdown && tabLink.getOffsetWidth() >  ) {
             = tabLink.getOffsetWidth();
        }
        return createTabheadingcontenttabLink.isActive(), content.getOffsetWidth(), content.getOffsetHeight() );
    }
    private DropdownTab cloneDropdownfinal DropdownTab original,
                                       final int excludedIndex ) {
        final DropdownTab newDropdown = new DropdownTaboriginal.getText() ) {{
            setDropuptrue );
        }};
        boolean isAnyTabActive = false;
        for ( int i = 0; i < original.getTabList().size(); i++ ) {
            final Tab currentTab = original.getTabList().geti );
            if ( i != excludedIndex ) {
                if ( !isAnyTabActive ) {
                    isAnyTabActive = currentTab.isActive();
                }
                newDropdown.addcloneTabcurrentTab.asTabLink(), truetrue ) );
            }
        }
        if ( isAnyTabActive ) {
            newDropdown.addStyleName. );
        } else {
            newDropdown.setText..More() );
        }
        return newDropdown;
    }
    @Override
    public void onResize() {
        final Widget parent = getParent();
        if ( parent != null ) {
            final int width = parent.getOffsetWidth();
            final int height = parent.getOffsetHeight();
            setPixelSizewidthheight );
            if ( width == 0 && height == 0 ) {
                //it's `invisible` = makes no sense try to resize
                return;
            }
            final ComplexPanel content = getTabContent();
            for ( int i = 0; i < content.getWidgetCount(); i++ ) {
                final Widget widget = content.getWidgeti );
                if ( widget instanceof TabPane ) {
                    final TabPane tabPane = (TabPanewidget;
                    final LayoutPanel flowPanel = ( (LayoutPanel) ( tabPane ).getWidget( 0 ) );
                    flowPanel.setPixelSizewidthheight - getTabHeight() );
                    //Resize children
                    for ( int iChild = 0; iChild < tabPane.getWidgetCount(); iChild++ ) {
                        final Widget childWidget = tabPane.getWidgetiChild );
                        if ( childWidget instanceof RequiresResize ) {
                            ( (RequiresResizechildWidget ).onResize();
                        }
                    }
                }
            }
            final ComplexPanel tabs = getTabs();
            if ( tabs != null && tabs.getWidgetCount() > 0 ) {
                final Widget firstTabItem = tabs.getWidget( 0 );
                final Widget lastTabItem = getLastTab();
                if ( width < getTabBarWidth() || tabs.getOffsetHeight() > firstTabItem.getOffsetHeight() ) {
                    shrinkTabBar();
                } else if ( lastTabItem instanceof DropdownTab
                        && ( getTabBarWidth() + getLastTab().getOffsetWidth() ) < width ) {
                    expandTabBar();
                }
            }
        }
    }
    private int getTabHeight() {
        return .getWidget( 1 ).getOffsetHeight() + ;
    }
    private ComplexPanel getTabContent() {
        return (ComplexPanel.getWidget( 0 );
    }
    private ComplexPanel getTabs() {
        return (ComplexPanel.getWidget( 1 );
    }
    private Widget getLastTab() {
        final ComplexPanel tabs = getTabs();
        return tabs.getWidgettabs.getWidgetCount() - 1 );
    }
    private Widget getBeforeLastTab() {
        final ComplexPanel tabs = getTabs();
        int index = tabs.getWidgetCount() - 2;
        if ( index < 0 ) {
            return null;
        }
        return tabs.getWidgetindex );
    }
    private int getTabBarWidth() {
        final ComplexPanel tabs = getTabs();
        int width = 0;
        for ( final Widget currentTab : tabs ) {
            width += currentTab.getOffsetWidth();
        }
        int margin = 42;
        if ( getLastTab() instanceof DropdownTab ) {
            margin = ;
        }
        return width + margin;
    }
New to GrepCode? Check out our FAQ X