diff --git a/src/main/java/com/vlsolutions/swing/docking/DockTabbedPane.java b/src/main/java/com/vlsolutions/swing/docking/DockTabbedPane.java index 7bf463b..9a3972c 100644 --- a/src/main/java/com/vlsolutions/swing/docking/DockTabbedPane.java +++ b/src/main/java/com/vlsolutions/swing/docking/DockTabbedPane.java @@ -374,7 +374,7 @@ public void actionPerformed(ActionEvent e) { //addTab(key.getName(), key.getIcon(), (Component)dc, key.getTooltip()); addTab("", smartIcon, (Component) dc, key.getTooltip()); //addTab(key.getName(),smartIcon, (Component) dc, key.getTooltip()); - tab = getTabCount() - 1; + // tab = getTabCount() - 1; } else { //insertTab(key.getName(), key.getIcon(), (Component)dc, key.getTooltip(), tab); insertTab("", smartIcon, (Component) dc, key.getTooltip(), tab); diff --git a/src/main/java/com/vlsolutions/swing/docking/DockingContext.java b/src/main/java/com/vlsolutions/swing/docking/DockingContext.java index 1974a35..14b35a8 100644 --- a/src/main/java/com/vlsolutions/swing/docking/DockingContext.java +++ b/src/main/java/com/vlsolutions/swing/docking/DockingContext.java @@ -29,10 +29,8 @@ import java.awt.Window; import java.awt.event.WindowEvent; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.io.PrintWriter; +import java.io.*; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; @@ -243,16 +241,15 @@ public DockableState[] getDockables() { * @see #readXML(InputStream) * */ public void writeXML(OutputStream stream) throws IOException { - PrintWriter out = new PrintWriter(stream); - out.println(""); - out.println(""); - for(int i = 0; i < desktops.size(); i++) { - DockingDesktop desktop = (DockingDesktop) desktops.get(i); - desktop.writeDesktopNode(out); + try (PrintWriter out = new PrintWriter(new OutputStreamWriter(stream, StandardCharsets.UTF_8))) { + out.println(""); + out.println(""); + for (DockingDesktop dockingDesktop : desktops) { + dockingDesktop.writeDesktopNode(out); + } + out.println(""); + out.flush(); } - out.println(""); - - out.flush(); } /** Reads an XML encoded stream as the new desktop configuration. diff --git a/src/main/java/com/vlsolutions/swing/docking/DockingDesktop.java b/src/main/java/com/vlsolutions/swing/docking/DockingDesktop.java index e6fe11e..96bfb81 100644 --- a/src/main/java/com/vlsolutions/swing/docking/DockingDesktop.java +++ b/src/main/java/com/vlsolutions/swing/docking/DockingDesktop.java @@ -44,10 +44,7 @@ import java.awt.event.WindowListener; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.io.PrintWriter; +import java.io.*; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; @@ -1315,31 +1312,29 @@ private void splitTab(Component base, TabbedDockableContainer tdc, DockingConstants.Split position) { // should be used only when drag and dropping - if (base == null) + if (base == null) { throw new NullPointerException("base"); - Dockable firstDockable = tdc.getDockableAt(0); - DockableState currentState = getDockableState(firstDockable); - boolean stateChange = false; - if (currentState.isFloating()) { - removePreviousFloatingStates(tdc); // clear reference of the - // previous state - stateChange = true; } - Container oldContainer = (Container) tdc; - int oldWidth = 0; - int oldHeight = 0; - if (oldContainer != null) { + int oldWidth; + int oldHeight; + boolean stateChange = false; + if (tdc instanceof Container) { + Container oldContainer = (Container) tdc; oldWidth = oldContainer.getWidth(); oldHeight = oldContainer.getHeight(); + DockableState currentState = getDockableState(tdc.getDockableAt(0)); + if (currentState.isFloating()) { + removePreviousFloatingStates(tdc); // clear reference of the + // previous state + stateChange = true; + } } else { - oldWidth = base.getWidth() / 2; + oldWidth = base.getWidth() / 2; oldHeight = base.getHeight() / 2; } - DockableContainer dockableContainer = tdc; - - // create a new splitcontainer that will replace baseDockable's + // create a new splitcontainer that will replace baseDockable's // container SplitContainer split; if (position == DockingConstants.SPLIT_TOP @@ -1358,10 +1353,10 @@ private void splitTab(Component base, TabbedDockableContainer tdc, if (position == DockingConstants.SPLIT_TOP || position == DockingConstants.SPLIT_LEFT) { - split.setLeftComponent((Component) dockableContainer); + split.setLeftComponent((Component) tdc); split.setRightComponent(base); } else { - split.setRightComponent((Component) dockableContainer); + split.setRightComponent((Component) tdc); split.setLeftComponent(base); } } else { @@ -1372,14 +1367,14 @@ private void splitTab(Component base, TabbedDockableContainer tdc, split); if (position == DockingConstants.SPLIT_TOP || position == DockingConstants.SPLIT_LEFT) { - split.setLeftComponent((Component) dockableContainer); + split.setLeftComponent((Component) tdc); split.setRightComponent(dockingPanelChild); } else { - split.setRightComponent((Component) dockableContainer); + split.setRightComponent((Component) tdc); split.setLeftComponent(dockingPanelChild); } } else { // dockingpanel is empty - dockingPanel.add((Component) dockableContainer); + dockingPanel.add((Component) tdc); } } @@ -1832,8 +1827,12 @@ public void restore(final Dockable dockable) { DockableState currentState = getDockableState(dockable); @SuppressWarnings("null") - boolean stateChange = currentState != null - || currentState.isMaximized(); + boolean stateChange; + if (currentState == null) { + stateChange = false; + } else { + stateChange = currentState.isMaximized(); + } DockableState newState = new DockableState(this, dockable, DockableState.Location.DOCKED); DockableState.Location currentLocation = getLocation(currentState); @@ -3011,17 +3010,26 @@ void writeDesktopNode(PrintWriter out) throws IOException { Window desktopWindow = SwingUtilities.getWindowAncestor(this); Point windowLocation; - if (desktopWindow != null) { - windowLocation = desktopWindow.getLocation(); - } else { - windowLocation = new Point(); // fail safe - } - - out.println(""); - out.println(""); + long x; + long y; + int width; + int height; + if (desktopWindow == null) { + x = 0; + y = 0; + width = 0; + height = 0; + } else { + windowLocation = desktopWindow.getLocation(); + x = Math.round(windowLocation.getX()); + y = Math.round(windowLocation.getY()); + width = desktopWindow.getWidth(); + height = desktopWindow.getHeight(); + } + + out.println(""); + out.println(""); if (dockingPanel.getComponentCount() > 0) { // only one top component (DockableContainer or SplitContainer) xmlWriteComponent(dockingPanel.getComponent(0), out); @@ -3037,9 +3045,9 @@ void writeDesktopNode(PrintWriter out) throws IOException { out.println(""); - for (int i = 0; i < borderPanes.length; i++) { - xmlWriteBorder(borderPanes[i], out); - } + for (AutoHideButtonPanel borderPane : borderPanes) { + xmlWriteBorder(borderPane, out); + } // finish with the floating dockables xmlWriteFloating(out); @@ -3072,11 +3080,12 @@ private void xmlWriteFloating(PrintWriter out) throws IOException { Window desktopWindow = SwingUtilities.getWindowAncestor(this); Point windowLocation; + /* if (desktopWindow != null) { windowLocation = desktopWindow.getLocation(); } else { windowLocation = new Point(); // fail safe - } + }*/ ArrayList floatingDockables = context.getDockablesByState( this, DockableState.Location.FLOATING); diff --git a/src/main/java/com/vlsolutions/swing/docking/ui/AutoHideButtonPanelUI.java b/src/main/java/com/vlsolutions/swing/docking/ui/AutoHideButtonPanelUI.java index c23ac25..4d57418 100644 --- a/src/main/java/com/vlsolutions/swing/docking/ui/AutoHideButtonPanelUI.java +++ b/src/main/java/com/vlsolutions/swing/docking/ui/AutoHideButtonPanelUI.java @@ -49,7 +49,7 @@ */ public class AutoHideButtonPanelUI extends BasicPanelUI implements PropertyChangeListener { - private static AutoHideButtonPanelUI instance = new AutoHideButtonPanelUI(); + private static final AutoHideButtonPanelUI instance = new AutoHideButtonPanelUI(); public static ComponentUI createUI(JComponent c) { return instance; diff --git a/src/main/java/com/vlsolutions/swing/docking/ui/AutoHideButtonUI.java b/src/main/java/com/vlsolutions/swing/docking/ui/AutoHideButtonUI.java index 0fda576..cadf7e0 100644 --- a/src/main/java/com/vlsolutions/swing/docking/ui/AutoHideButtonUI.java +++ b/src/main/java/com/vlsolutions/swing/docking/ui/AutoHideButtonUI.java @@ -53,7 +53,7 @@ */ public class AutoHideButtonUI extends BasicLabelUI implements PropertyChangeListener { - protected static AutoHideButtonUI instance = new AutoHideButtonUI(); + protected static final AutoHideButtonUI instance = new AutoHideButtonUI(); public AutoHideButtonUI() {} diff --git a/src/main/java/com/vlsolutions/swing/docking/ui/DockingUISettings.java b/src/main/java/com/vlsolutions/swing/docking/ui/DockingUISettings.java index 25dcdfb..b50f38b 100644 --- a/src/main/java/com/vlsolutions/swing/docking/ui/DockingUISettings.java +++ b/src/main/java/com/vlsolutions/swing/docking/ui/DockingUISettings.java @@ -752,7 +752,7 @@ public void installDockViewTitleBarSettings() { UIManager.put("DockViewTitleBarUI", "com.vlsolutions.swing.docking.ui.DockViewTitleBarUI"); - UIManager.put("DockViewTitleBar.height", new Integer(20)); + UIManager.put("DockViewTitleBar.height", 20); UIManager.put("DockViewTitleBar.closeButtonText", UIManager.getString("InternalFrameTitlePane.closeButtonText")); UIManager.put("DockViewTitleBar.minimizeButtonText", UIManager @@ -793,7 +793,7 @@ public void installDockViewTitleBarSettings() { public void installSplitContainerSettings() { UIManager.put("DockingSplitPaneUI", "com.vlsolutions.swing.docking.ui.DockingSplitPaneUI"); - UIManager.put("SplitContainer.dividerSize", new Integer(4)); + UIManager.put("SplitContainer.dividerSize", 4); UIManager.put("SplitContainer.isResizingEnabled", Boolean.TRUE); // 2007/08/11 } @@ -802,8 +802,7 @@ public void installSplitContainerSettings() { public void installTabbedContainerSettings() { @SuppressWarnings("unused") final String prefix = "/com/vldocking/swing/docking/"; - UIManager.put("TabbedDockableContainer.tabPlacement", new Integer( - SwingConstants.TOP)); + UIManager.put("TabbedDockableContainer.tabPlacement", SwingConstants.TOP); UIManager.put("DockTabbedPane.closeButtonText", UIManager.getString("InternalFrameTitlePane.closeButtonText")); @@ -832,8 +831,8 @@ public void installTabbedContainerSettings() { public void installCloseableTabs() { // this one is already provided by the look and feel // UIManager.put("TabbedPane.textIconGap", new Integer(4)); - UIManager.put("TabbedPane.otherIconsGap", new Integer(8)); - UIManager.put("TabbedPane.inBetweenOtherIconsGap", new Integer(4)); + UIManager.put("TabbedPane.otherIconsGap", 8); + UIManager.put("TabbedPane.inBetweenOtherIconsGap", 4); UIManager.put("TabbedPane.alternateTabIcons", Boolean.FALSE); } @@ -887,6 +886,9 @@ public void installIcons() { UIManager.put("DockViewTitleBar.close", closeIcon); UIManager.put("DockViewTitleBar.close.rollover", closeRolloverIcon); UIManager.put("DockViewTitleBar.close.pressed", closePressedIcon); + UIManager.put("DockViewTitleBar.closeTab", closeTabIcon); + UIManager.put("DockViewTitleBar.closeTab.rollover", closeTabRolloverIcon); + UIManager.put("DockViewTitleBar.closeTab.pressed", closeTabPressedIcon); UIManager.put("DockViewTitleBar.dock", new ImageIcon(getClass() .getResource(prefix + "dock16v2.png"))); @@ -952,7 +954,7 @@ public void installIcons() { public void installAccelerators() { int MENU_SHORTCUT_MASK = Toolkit.getDefaultToolkit() - .getMenuShortcutKeyMask(); + .getMenuShortcutKeyMaskEx(); // this returns CTRL_MASK or META_MASK depending on the platform // (win/mac os) @@ -961,7 +963,7 @@ public void installAccelerators() { // toggle maximize/restore UIManager .put("DockingDesktop.maximizeActionAccelerator", KeyStroke - .getKeyStroke(KeyEvent.VK_ESCAPE, KeyEvent.SHIFT_MASK)); + .getKeyStroke(KeyEvent.VK_ESCAPE, KeyEvent.SHIFT_DOWN_MASK)); // toggle autohide/dock UIManager.put("DockingDesktop.dockActionAccelerator", KeyStroke @@ -975,7 +977,7 @@ public void installAccelerators() { /** installs the DockinDesktop related properties */ public void installDesktopSettings() { UIManager.put("DockingDesktop.notificationColor", Color.ORANGE); - UIManager.put("DockingDesktop.notificationBlinkCount", new Integer(5)); + UIManager.put("DockingDesktop.notificationBlinkCount", 5); UIManager.put( "DragControler.stopDragCursor", new ImageIcon(getClass().getResource( diff --git a/src/main/java/com/vlsolutions/swing/docking/ws/Workspace.java b/src/main/java/com/vlsolutions/swing/docking/ws/Workspace.java index c68c268..fb02314 100644 --- a/src/main/java/com/vlsolutions/swing/docking/ws/Workspace.java +++ b/src/main/java/com/vlsolutions/swing/docking/ws/Workspace.java @@ -20,12 +20,8 @@ import com.vlsolutions.swing.docking.DockingContext; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.io.PrintWriter; +import java.io.*; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; import javax.xml.parsers.DocumentBuilder; @@ -55,7 +51,7 @@ */ public class Workspace { - private ArrayList desktops = new ArrayList(); + private final ArrayList desktops = new ArrayList<>(); /** Creates a workspace with a single default WSDesktop */ public Workspace() { @@ -79,16 +75,16 @@ public int getDesktopCount() { /** Returns the index-th desktop contained */ public WSDesktop getDesktop(int index) { - return (WSDesktop) desktops.get(index); + return desktops.get(index); } /** Returns a desktop identified by its name or null if not found */ public WSDesktop getDesktop(String desktopName) { if(desktops.size() == 1) { - return (WSDesktop) desktops.get(0); + return desktops.get(0); } for(int i = 0; i < desktops.size(); i++) { - WSDesktop d = (WSDesktop) desktops.get(i); + WSDesktop d = desktops.get(i); if(d.getDesktopName().equals(desktopName)) { return d; } @@ -102,30 +98,26 @@ public WSDesktop getDesktop(String desktopName) { * by this workspace layout. */ public void apply(DockingContext dockingContext) throws WorkspaceException { - ByteArrayOutputStream outb = new ByteArrayOutputStream(); - PrintWriter out = new PrintWriter(outb); - out.println(""); - out.println(""); - for(int i = 0; i < desktops.size(); i++) { - WSDesktop desktop = (WSDesktop) desktops.get(i); - desktop.writeDesktopNode(out); - } - out.println(""); - out.close(); - byte[] bytes = outb.toByteArray(); - //System.out.println(new String(bytes)); - ByteArrayInputStream is = new ByteArrayInputStream(bytes); - try { - dockingContext.readXML(is); - } catch(Exception ex) { - throw new WorkspaceException(ex); - } finally { - try { - is.close(); - } catch(Exception ignore) { + try (ByteArrayOutputStream outb = new ByteArrayOutputStream()) { + try (PrintWriter out = new PrintWriter(new OutputStreamWriter(outb, StandardCharsets.UTF_8))) { + out.println(""); + out.println(""); + for (WSDesktop desktop : desktops) { + desktop.writeDesktopNode(out); + } + out.println(""); + } + byte[] bytes = outb.toByteArray(); + //System.out.println(new String(bytes)); + try (ByteArrayInputStream is = new ByteArrayInputStream(bytes)) { + dockingContext.readXML(is); + } catch (Exception ex) { + throw new WorkspaceException(ex); } - } - } + } catch (IOException ex) { + throw new WorkspaceException(ex); + } + } /** Loads and configures this workspace from a given docking context. *

@@ -158,17 +150,16 @@ public void loadFrom(DockingContext context) throws WorkspaceException { * * @see #readXML(InputStream) * */ - public void writeXML(OutputStream stream) throws IOException { - PrintWriter out = new PrintWriter(stream); - out.println(""); - out.println(""); - for(int i = 0; i < desktops.size(); i++) { - WSDesktop desktop = (WSDesktop) desktops.get(i); - desktop.writeDesktopNode(out); + public void writeXML(OutputStream stream) { + try (PrintWriter out = new PrintWriter(new OutputStreamWriter(stream, StandardCharsets.UTF_8))) { + out.println(""); + out.println(""); + for (WSDesktop desktop : desktops) { + desktop.writeDesktopNode(out); + } + out.println(""); + out.flush(); } - out.println(""); - - out.flush(); } public void readXML(InputStream in) throws ParserConfigurationException, IOException, SAXException { @@ -176,7 +167,7 @@ public void readXML(InputStream in) throws ParserConfigurationException, IOExcep // remove all dockable states for(int i = 0; i < desktops.size(); i++) { - WSDesktop desk = (WSDesktop) desktops.get(i); + WSDesktop desk = desktops.get(i); desk.clear(); } diff --git a/src/main/java/com/vlsolutions/swing/toolbars/ToolBarGripperUI.java b/src/main/java/com/vlsolutions/swing/toolbars/ToolBarGripperUI.java index 10b99d4..9c10091 100644 --- a/src/main/java/com/vlsolutions/swing/toolbars/ToolBarGripperUI.java +++ b/src/main/java/com/vlsolutions/swing/toolbars/ToolBarGripperUI.java @@ -34,10 +34,10 @@ public class ToolBarGripperUI extends ComponentUI { /** the "grip" (an alpha blended dot image, 3*3 pixels, hightlighted underneath ) */ - protected static Image gripImage = new ImageIcon(ToolBarGripperUI.class.getResource("gripper.png")).getImage(); + protected static final Image gripImage = new ImageIcon(ToolBarGripperUI.class.getResource("gripper.png")).getImage(); - protected static Image gripExpandHImage = new ImageIcon(ToolBarGripperUI.class.getResource("grip_expand_h.png")).getImage(); - protected static Image gripExpandVImage = new ImageIcon(ToolBarGripperUI.class.getResource("grip_expand_v.png")).getImage(); + protected static final Image gripExpandHImage = new ImageIcon(ToolBarGripperUI.class.getResource("grip_expand_h.png")).getImage(); + protected static final Image gripExpandVImage = new ImageIcon(ToolBarGripperUI.class.getResource("grip_expand_v.png")).getImage(); /** Constructs a new gripper UI */ public ToolBarGripperUI() {} diff --git a/src/main/java/com/vlsolutions/swing/toolbars/ToolBarIO.java b/src/main/java/com/vlsolutions/swing/toolbars/ToolBarIO.java index 3ae87bc..14e10cc 100644 --- a/src/main/java/com/vlsolutions/swing/toolbars/ToolBarIO.java +++ b/src/main/java/com/vlsolutions/swing/toolbars/ToolBarIO.java @@ -21,10 +21,8 @@ import java.awt.BorderLayout; import java.awt.Component; import java.awt.Container; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.io.PrintWriter; +import java.io.*; +import java.nio.charset.StandardCharsets; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; @@ -55,14 +53,14 @@ public ToolBarIO(ToolBarContainer container) { * * @see #readXML(InputStream) * */ - public void writeXML(OutputStream stream) throws IOException { - PrintWriter out = new PrintWriter(stream); - out.println(""); - out.println(""); - xmlWriteContainer(out); - - out.println(""); - out.flush(); + public void writeXML(OutputStream stream) { + try (PrintWriter out = new PrintWriter(new OutputStreamWriter(stream, StandardCharsets.UTF_8))) { + out.println(""); + out.println(""); + xmlWriteContainer(out); + out.println(""); + out.flush(); + } } private void xmlWriteContainer(PrintWriter out) { diff --git a/src/main/java/com/vlsolutions/swing/toolbars/VLToolBar.java b/src/main/java/com/vlsolutions/swing/toolbars/VLToolBar.java index 9b2e16c..387db39 100644 --- a/src/main/java/com/vlsolutions/swing/toolbars/VLToolBar.java +++ b/src/main/java/com/vlsolutions/swing/toolbars/VLToolBar.java @@ -292,9 +292,6 @@ public Border getDraggedBorder() { } private void gripperDragged(MouseEvent e) { - // where are we ? - @SuppressWarnings("unused") - Component gripper = e.getComponent(); ToolBarPanel panel = (ToolBarPanel) this.getParent(); if(! (panel.getParent() instanceof ToolBarContainer)) { //2006/12/01 // this is a safety for users willing to include toolbar panels outside