From 1606bfa2c5be06a9e2705aaf1bbab18a9c3e4229 Mon Sep 17 00:00:00 2001 From: drdev Date: Wed, 12 Feb 2014 06:17:17 +0000 Subject: [PATCH] Show resize cursor when hover border between columns and while resizing column --- .../src/main/java/forge/gui/MouseUtil.java | 27 +++++++++++++++++-- .../itemmanager/views/ItemListView.java | 20 ++++++++++++++ 2 files changed, 45 insertions(+), 2 deletions(-) diff --git a/forge-gui/src/main/java/forge/gui/MouseUtil.java b/forge-gui/src/main/java/forge/gui/MouseUtil.java index c31d3db789e..899e8831137 100644 --- a/forge-gui/src/main/java/forge/gui/MouseUtil.java +++ b/forge-gui/src/main/java/forge/gui/MouseUtil.java @@ -25,13 +25,36 @@ public final class MouseUtil { throw new IllegalArgumentException("No Enum specified for this int"); } }; + + private static Cursor cursor; + private static int cursorLockCount; + + /** + * Lock cursor as it is currently displayed until unlockCursor called + */ + public static void lockCursor() { + cursorLockCount++; + } + public static void unlockCursor() { + if (cursorLockCount == 0) { return; } + if (--cursorLockCount == 0) { + //update displayed cursor after cursor unlocked + FView.SINGLETON_INSTANCE.getLpnDocument().setCursor(cursor); + } + } /** * The only reliable way to ensure the mouse cursor is set properly in Forge. * * @param mouseCursor one of the predefined {@code Cursor} types. */ - public static void setMouseCursor(MouseCursor cursor) { - FView.SINGLETON_INSTANCE.getLpnDocument().setCursor(Cursor.getPredefinedCursor(cursor.toInt())); + public static void setMouseCursor(MouseCursor cursor0) { + setCursor(Cursor.getPredefinedCursor(cursor0.toInt())); + } + public static void setCursor(Cursor cursor0) { + if (cursor == cursor0) { return; } + cursor = cursor0; + if (cursorLockCount > 0) { return; } + FView.SINGLETON_INSTANCE.getLpnDocument().setCursor(cursor); } } diff --git a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/views/ItemListView.java b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/views/ItemListView.java index 80fac7a3fd5..aa05cd0c117 100644 --- a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/views/ItemListView.java +++ b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/views/ItemListView.java @@ -17,6 +17,7 @@ */ package forge.gui.toolbox.itemmanager.views; +import forge.gui.MouseUtil; import forge.gui.toolbox.FMouseAdapter; import forge.gui.toolbox.FSkin; import forge.gui.toolbox.FSkin.*; @@ -32,11 +33,13 @@ import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import javax.swing.event.TableModelEvent; import javax.swing.table.*; + import java.awt.*; import java.awt.event.FocusAdapter; import java.awt.event.FocusEvent; import java.awt.event.FocusListener; import java.awt.event.MouseEvent; +import java.awt.event.MouseMotionAdapter; import java.util.*; import java.util.List; import java.util.Map.Entry; @@ -502,6 +505,7 @@ public final class ItemListView extends ItemView { if (index >= 0) { resizeColumn = (ItemColumn) colModel.getColumn(index); resizeColumn.startResize(); + MouseUtil.lockCursor(); //lock resize cursor during resize } } } @@ -509,6 +513,7 @@ public final class ItemListView extends ItemView { @Override public void onLeftMouseUp(MouseEvent e) { if (resizeColumn != null) { + MouseUtil.unlockCursor(); resizeColumn.endResize(); resizeColumn = null; } @@ -542,6 +547,18 @@ public final class ItemListView extends ItemView { public void onLeftMouseDragDrop(MouseEvent e) { //save preferences after column moved/resized SItemManagerIO.savePreferences(itemManager); } + + @Override + public void onMouseExit(MouseEvent e) { + MouseUtil.setCursor(Cursor.getDefaultCursor()); + } + }; + + private final MouseMotionAdapter headerMouseMotionAdapter = new MouseMotionAdapter() { + @Override + public void mouseMoved(MouseEvent arg0) { + MouseUtil.setCursor(table.getTableHeader().getCursor()); + } }; /** @@ -559,6 +576,9 @@ public final class ItemListView extends ItemView { table.getTableHeader().removeMouseListener(headerMouseAdapter); //ensure listener not added multiple times table.getTableHeader().addMouseListener(headerMouseAdapter); + + table.getTableHeader().removeMouseMotionListener(headerMouseMotionAdapter); //ensure listener not added multiple times + table.getTableHeader().addMouseMotionListener(headerMouseMotionAdapter); } //========== Overridden from AbstractTableModel