private void merge( StackDockStation parent, StackDockStation child ){ StackDockStation.Insert insert = parent.getInsert(); int index = parent.getDockableCount(); if( insert != null ){ index = insert.getTab(); if( insert.isRight() ){ index++; } } for( int i = child.getDockableCount()-1; i >= 0; i-- ){ Dockable dockable = child.getDockable( i ); child.remove( i ); parent.add( dockable, index ); } } }
public StackDockStationLayout getLayout( StackDockStation station, Map<Dockable, Integer> children ){ Dockable selectedDockable = station.getFrontDockable(); int selected = -1; if (selectedDockable != null) { selected = station.indexOf( selectedDockable ); } PlaceholderMap map = station.getPlaceholders( children ); return new StackDockStationLayout( selected, map ); }
public StationDragOperation prepareDrag( Dockable dockable ){ dragOperation = new ComponentDragOperation( dockable, getComponent() ){ @Override protected void destroy(){ dragOperation = null; } }; return dragOperation; }
public void drag( Dockable dockable ) { if( dockable.getDockParent() != this ) throw new IllegalArgumentException( "The dockable can't be dragged, it is not child of this station" ); int index = indexOf( dockable ); if( index < 0 ) throw new IllegalArgumentException( "The dockable is not part of this station." ); remove( index ); }
public void setLayout( StackDockStation station, StackDockStationLayout layout, Map<Integer, Dockable> children, PlaceholderStrategy placeholders ){ DockController controller = station.getController(); try { if (controller != null) controller.freezeLayout(); for (int i = station.getDockableCount() - 1; i >= 0; i--) station.remove( i ); if( layout instanceof RetroStackDockStationLayout ){ RetroStackDockStationLayout retroLayout = (RetroStackDockStationLayout)layout; for (int id : retroLayout.getChildren()) { Dockable dockable = children.get( id ); if (dockable != null) { station.drop( dockable ); } } } else{ station.setPlaceholders( layout.getPlaceholders().filter( placeholders ), children ); } Dockable selected = children.get( layout.getSelected() ); if (selected != null) { station.setFrontDockable( selected ); } } finally { if (controller != null) controller.meltLayout(); } }
private int getMaxSize( Dockable dockable, boolean horizontal ){ if( dockable instanceof CommonDockable ){ CDockable cdock = ((CommonDockable)dockable).getDockable(); Dimension size = cdock.getMinimizedSize(); if( horizontal ) return size.height; else return size.width; } if( dockable instanceof StackDockStation ){ StackDockStation station = (StackDockStation)dockable; int size = -1; for( int i = 0, n = station.getDockableCount(); i<n; i++ ){ size = Math.max( size, getMaxSize( station.getDockable( i ), horizontal )); } return size; } return -1; }
public void merge( StationDropOperation operation, DockStation parent, DockStation child ){ DisplayerCombinerTarget target = operation.getDisplayerCombination(); if( target instanceof TabDisplayerCombinerTarget ){ TabDisplayerCombinerTarget tab = (TabDisplayerCombinerTarget)target; StackDockStation station = (StackDockStation)operation.getItem(); if( station.getDockParent() != null ){ station.getDockParent().drag( station ); } Dockable dockable = tab.getTarget(); parent.replace( dockable, station ); Dockable selected = station.getFrontDockable(); if( tab.getIndex() == 0 ){ station.add( dockable, station.getDockableCount() ); } else{ station.add( dockable, 0 ); } DockController controller = station.getController(); if( controller != null ){ controller.setFocusedDockable( selected, false ); } } } }
public void apply( CGroupBehaviorCallback callback ){ int baseIndex = dockParent.indexOf( dockable ); Dockable[] children = new Dockable[ dockParent.getDockableCount() ]; for( int i = 0; i < children.length; i++ ){ children[i] = dockParent.getDockable( i );
StackDockStation station = (StackDockStation)dockable; for( int i = 0, n = station.getDockableCount(); i<n; i++ ){ RequestDimension check = getAndClearResizeRequest( station.getDockable( i ) ); if( check != null ){ Dimension sizeDockable = station.getDockable( i ).getComponent().getSize(); Dimension sizeStation = station.getComponent().getSize();
public Dockable execute( CombinerSource source ){ DockStation parent = source.getParent(); PlaceholderMap placeholders = source.getPlaceholders(); StackDockStation stack = new StackDockStation( parent.getTheme() ); stack.setController( parent.getController() ); if( placeholders != null ){ stack.setPlaceholders( placeholders ); } if( index == 1 ){ stack.drop( source.getOld(), false ); stack.drop( source.getNew(), false ); } else{ stack.drop( source.getNew(), false ); stack.drop( source.getOld(), false ); } return stack; }
public void move( Dockable dockable, DockableProperty property ) { if( property instanceof StackDockProperty ){ DockUtilities.checkLayoutLocked(); int index = indexOf( dockable ); if( index < 0 ) throw new IllegalArgumentException( "dockable not child of this station" ); int destination = ((StackDockProperty)property).getIndex(); destination = Math.min( destination, getDockableCount()-1 ); destination = Math.max( 0, destination ); move( index, destination ); } }
public void replace( Dockable old, Dockable next, boolean station ) { DockUtilities.checkLayoutLocked(); DockController controller = getController(); try{ if( controller != null ) controller.freezeLayout(); int index = indexOf( old ); int listIndex = dockables.levelToBase( index, Level.DOCKABLE ); DockablePlaceholderList<StationChildHandle>.Item oldItem = dockables.list().get( listIndex ); remove( index ); add( next, index ); DockablePlaceholderList<StationChildHandle>.Item newItem = dockables.list().get( listIndex ); if( station ){ newItem.setPlaceholderMap( old.asDockStation().getPlaceholders() ); } else{ newItem.setPlaceholderMap( oldItem.getPlaceholderMap() ); } newItem.setPlaceholderSet( oldItem.getPlaceholderSet() ); } finally{ if( controller != null ) controller.meltLayout(); } }
public void setPlaceholders( PlaceholderMap placeholders ){ if( getDockableCount() > 0 ){ throw new IllegalStateException( "there are children on this station" ); } try{ DockablePlaceholderList<StationChildHandle> next = new DockablePlaceholderList<StationChildHandle>( placeholders ); if( getController() != null ){ dockables.setStrategy( null ); dockables.unbind(); dockables = next; dockables.bind(); dockables.setStrategy( getPlaceholderStrategy() ); } else{ dockables = next; } } catch( IllegalArgumentException ex ){ // ignore } }
private void updateContent( int index ){ if( index >= 0 && (getDockableCount() > 1 || singleTabStackDockComponent()) ){ Dockable dockable = getDockable( index ); TabContentFilter filter = getTabContentFilter(); TabContent content = new TabContent( dockable.getTitleIcon(), dockable.getTitleText(), dockable.getTitleToolTip() ); if( filter != null ){ content = filter.filter( content, this, dockable ); } if( content == null ){ stackComponent.setTitleAt( index, null ); stackComponent.setIconAt( index, null ); stackComponent.setTooltipAt( index, null ); } else{ stackComponent.setTitleAt( index, content.getTitle() ); stackComponent.setIconAt( index, content.getIcon() ); stackComponent.setTooltipAt( index, content.getTooltip() ); } } }
stackComponentRepresentative.setComponent( stackComponent ); if( getDockableCount() < 2 && !singleTabStackDockComponent() ){ stackComponent.addStackDockComponentListener( visibleListener ); DockableDisplayer displayer = handle.getDisplayer(); int index = stackComponent.getTabCount(); insertTab( displayer, index ); stackComponent.setController( getController() ); for( MouseInputListener listener : mouseInputListeners ){ component.addMouseListener( listener ); autoSelectSupport.install( this, this.stackComponent ); updateConfigurableDisplayerHints();
public void titleTextChanged( Dockable dockable, String oldTitle, String newTitle ) { int index = indexOf( dockable ); if( index >= 0 ){ updateContent( index ); } }
public StationDropOperation prepareDrop( StationDropItem item ){ if( item.getDockable().getDockParent() == this ){ return prepareMove( item ); } if( SwingUtilities.isDescendingFrom( getComponent(), item.getDockable().getComponent() )){ return null; } Point point = new Point( item.getMouseX(), item.getMouseY() ); SwingUtilities.convertPointFromScreen( point, panel ); Insert insert = tabIndexAt( point.x, point.y ); if( validate( insert, item.getDockable() )){ return new StackDropOperation( item.getDockable(), insert, false ); } return null; }
private void focusAfterRemoving( boolean removedSelectedDockable ){ if( removedSelectedDockable ){ DockController controller = getController(); if( controller != null && dockables.dockables().size() > 1 ){ Dockable next = controller.getFocusHistory().getNewestOn( this ); if( next != null && next.getDockParent() == this ){ stackComponent.setSelectedIndex( indexOf( next ) ); return; } } } visibleListener.selectionChanged( stackComponent ); }
@Override protected void paintOverlay( Graphics g ) { DefaultStationPaintValue paint = getPaint(); insertionLine( bounds, insert.tab+1 < stackComponent.getTabCount() ? stackComponent.getBoundsAt( insert.tab+1 ) : null, a, b, true ); insertionLine( insert.tab > 0 ? stackComponent.getBoundsAt( insert.tab-1 ) : null, bounds, a, b, false ); Rectangle bounds = new Rectangle( 0, 0, getWidth(), getHeight() ); Rectangle frontBounds = null; if( getDockableCount() < 2 ) frontBounds = bounds; else{
Path placeholder = property.getPlaceholder(); boolean acceptable = acceptable( dockable ); DockableProperty successor = property.getSuccessor(); add( dockable, 0, placeholder ); result = true; drop( dockable, false ); result = true; add( dockable, index ); result = true;