Hi Beni,
I found a bug that changes the focus of dockables on a maximized StackDockStation when an external dockable is closed.
The reproduction is as follows:
- run the below code
- a frame with some dockables is open, the dockables are maximized (by maximizing the red dockable), the last one is focused (Red4), there is one additional external dockable (green)
- close the external green dockable -> the focus on the stack switches from Red4 to Blue
It only happens if the stack is maximized.
kind regards,
Maciej Modelski
package test;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import bibliothek.extension.gui.dock.theme.flat.FlatStationPaint;
import bibliothek.gui.dock.ScreenDockStation;
import bibliothek.gui.dock.SplitDockStation;
import bibliothek.gui.dock.common.CControl;
import bibliothek.gui.dock.common.CGrid;
import bibliothek.gui.dock.common.DefaultSingleCDockable;
import bibliothek.gui.dock.common.mode.ExtendedMode;
import bibliothek.gui.dock.common.theme.CEclipseTheme;
import bibliothek.gui.dock.common.theme.ThemeMap;
import bibliothek.gui.dock.dockable.ScreencaptureMovingImageFactory;
import bibliothek.gui.dock.station.screen.ScreenDockProperty;
import bibliothek.gui.dock.station.split.SplitDockPathProperty;
public class Dock112
{
public static void main(String[] args)
{
// setting up frame and controller
JFrame frame = new JFrame();
final CControl control = new CControl(frame);
control.setTheme(ThemeMap.KEY_ECLIPSE_THEME);
((CEclipseTheme)control.getController().getTheme()).intern().setPaint(new FlatStationPaint());
((CEclipseTheme)control.getController().getTheme()).intern().setMovingImageFactory(new ScreencaptureMovingImageFactory(new Dimension(300, 200)));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBounds(300, 300, 700, 400);
CGrid grid = new CGrid(control);
control.getContentArea().deploy(grid);
final SplitDockStation split = control.getContentArea().getCenter();
DefaultSingleCDockable red = create(control, "Red", Color.RED);
control.addDockable(red);
split.drop(red.intern(), new SplitDockPathProperty());
DefaultSingleCDockable blue = create(control, "Blue", Color.BLUE);
control.addDockable(blue);
split.drop(blue.intern(), new SplitDockPathProperty());
for (int i=0; i<5; i++)
{
DefaultSingleCDockable dock = create(control, "Red" + i, Color.RED);
control.addDockable(dock);
split.drop(dock.intern(), new SplitDockPathProperty());
}
ScreenDockStation screen = (ScreenDockStation) control.getStation(CControl.EXTERNALIZED_STATION_ID).getStation();
DefaultSingleCDockable green = create(control, "Green", Color.GREEN);
control.addDockable(green);
screen.drop(green.intern(), new ScreenDockProperty(100, 100, 200, 200));
red.setExtendedMode(ExtendedMode.MAXIMIZED);
frame.getContentPane().add(control.getContentArea(), BorderLayout.CENTER);
frame.setVisible(true);
}
public static DefaultSingleCDockable create(CControl control, String title, Color color)
{
final JPanel panel = new JPanel();
panel.setOpaque(true);
panel.setBackground(color);
final DefaultSingleCDockable singleDockable = new DefaultSingleCDockable(title, title, panel);
singleDockable.setCloseable(true);
return singleDockable;
}
}