/** * Creates a new {@link ToolbarDockStation}. * * @return the new station, not <code>null</code> */ protected ToolbarDockStation createStation(){ return new ToolbarDockStation(); } }
protected boolean drop( Dockable dockable, int index, boolean force ){ // note: merging of two ToolbarGroupDockStations is done by the // ToolbarGroupDockStationMerger // System.out.println(this.toString() // + "## drop(Dockable dockable, int index)##"); if( force || this.accept( dockable ) ) { if( !force ) { Dockable replacement = getToolbarStrategy().ensureToolbarLayer( this, dockable ); if( replacement == null ) { return false; } if( replacement != dockable ) { replacement.asDockStation().drop( dockable ); dockable = replacement; } } add( dockable, index ); return true; } return false; }
@Override public void discard( DockableDisplayer displayer ){ ToolbarDockStation.this.discard( displayer ); }
@Override public void drop( Dockable dockable ){ // System.out.println(this.toString() + "## drop(Dockable dockable)##"); this.drop( dockable, getDockableCount(), true ); }
@Override public void replace( Dockable old, Dockable next ){ DockUtilities.checkLayoutLocked(); final DockController controller = getController(); if( controller != null ) { controller.freezeLayout(); } final int index = indexOf( old ); remove( old ); // the child is a ToolbarGroupDockStation because canReplace() // ensure it add( next, index ); controller.meltLayout(); }
@Override public boolean drop( Dockable dockable, DockableProperty property ){ if( isValidProperty( property ) ) { final boolean acceptable = acceptable( dockable ); boolean result = false; final int index = Math.min( getDockableCount(), getIndex( property ) ); final Path placeholder = getPlaceholder( property ); if( (placeholder != null) && (property.getSuccessor() != null) ) { final StationChildHandle preset = dockables.getDockableAt( placeholder ); add( dockable, index, placeholder ); result = true; drop( dockable ); result = true; final DockStation child = getDockable( index ).asDockStation(); if( child != null ) { result = child.drop( dockable, property.getSuccessor() ); result = drop( dockable, index );
protected void init(){ super.init( ThemeManager.BACKGROUND_PAINT + ".station.toolbar" ); mainPanel = createMainPanel(); mainPanel.setupLayout(); paint = new DefaultStationPaintValue( ThemeManager.STATION_PAINT + ".toolbar", this ); setOrientation( getOrientation() ); displayerFactory = createDisplayerFactory(); displayers = new DisplayerCollection( this, displayerFactory, getDisplayerId() ); displayers.addDockableDisplayerListener( new DockableDisplayerListener(){ @Override setTitleIcon( null ); getComponent().addHierarchyListener( new HierarchyListener(){ public void hierarchyChanged( HierarchyEvent e ){ if( (e.getChangeFlags() & HierarchyEvent.SHOWING_CHANGED) != 0 ) {
Dockable replacement = getToolbarStrategy().ensureToolbarLayer( this, dockable ); if( replacement != dockable ) { replacement.asDockStation().drop( dockable ); if( getExpandedState() == ExpandedState.EXPANDED && getDockableCount() == 1){ DockStation stack = getDockable( 0 ).asDockStation(); stack.drop( dockable, new StackDockProperty( index, placeholder ) ); getDockables().add( index, handle ); insertAt( handle, index ); listeners.fireDockableAdded( dockable ); fireDockablesRepositioned( index + 1 );
protected void remove( Dockable dockable ){ DockUtilities.checkLayoutLocked(); final int index = indexOf( dockable ); final StationChildHandle handle = dockables.dockables().get( index ); if( getFrontDockable() == dockable ) { setFrontDockable( null ); handle.destroy(); listeners.fireDockableRemoved( dockable ); fireDockablesRepositioned( index );
DockUtilities.checkLayoutLocked(); final StationChildHandle handle = dockables.dockables().get( index ); final Dockable dockable = getDockable( index ); if( getFrontDockable() == dockable ) { setFrontDockable( null ); handle.destroy(); listeners.fireDockableRemoved( dockable ); fireDockablesRepositioned( index );
final DockController controller = getController(); try { if( controller != null ) { controller.freezeLayout(); int current = indexOf( dockable ); if( current == -1 ) { throw new IllegalArgumentException( "dockable is not known to this station" ); this.add( dockable, index );
@Override public StationDropOperation prepareDrop( StationDropItem item ){ // System.out.println(this.toString() + "## prepareDrop(...) ##"); final DockController controller = getController(); if( getExpandedState() == ExpandedState.EXPANDED ) { return null; } Dockable dockable = item.getDockable(); // check if the dockable and the station accept each other if( this.accept( dockable ) && dockable.accept( this ) ) { // check if controller exist and if the controller accept that // the dockable become a child of this station if( controller != null ) { if( !controller.getAcceptance().accept( this, dockable ) ) { return null; } } Point mouse = new Point( item.getMouseX(), item.getMouseY() ); SwingUtilities.convertPointFromScreen( mouse, mainPanel.getDockablePane() ); int index = layoutManager.getInsertionIndex( mouse.x, mouse.y ); DropInfo info = new DropInfo( dockable, index ); if( info.hasNoEffect() ) { return null; } return info; } else { return null; } }
@Override public Dockable ensureToolbarLayer( DockStation station, Dockable dockable ){ if (station instanceof ToolbarDockStation){ return dockable; } if (station instanceof ToolbarGroupDockStation){ if (dockable instanceof ToolbarDockStation){ return dockable; } else{ ToolbarDockStation replacement = new ToolbarDockStation(); replacement.setOrientation( getOrientation( dockable ) ); return replacement; } } if ((station instanceof ToolbarContainerDockStation) || (station instanceof ScreenDockStation)){ if (dockable instanceof ToolbarGroupDockStation){ return dockable; } else{ ToolbarGroupDockStation replacement = new ToolbarGroupDockStation(); replacement.setOrientation( getOrientation( dockable ) ); return replacement; } } return null; }
protected void add( Dockable dockable, int index ){ add( dockable, index, null ); }
/** * Initializes this panel with the default layout, namely exactly one child which is the * {@link #setDockablePane(JComponent) dockable pane}. */ public void setupLayout(){ setDockablePane( createBackgroundPanel() ); setBasePane( dockablePane ); }
@Override public void merge( StationDropOperation operation, DockStation parent, DockStation child ){ final ToolbarDropInfo operationToolbar = (ToolbarDropInfo) operation; final ToolbarDockStation station = (ToolbarDockStation) parent; // WARNING: if I don't do a copy of dockables, problem occurs. // Perhaps due to concurrent access to the dockable (drop in // goal area ==> drag in origin area)? final int count = child.getDockableCount(); final List<Dockable> insertDockables = new ArrayList<Dockable>(); for (int i = 0; i < count; i++){ insertDockables.add(child.getDockable(i)); } int dropIndex = operationToolbar.getIndex(); for (int i = 0; i < count; i++){ station.drop(insertDockables.get(i), dropIndex++); } } }