X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=ui%2FListModel.java;h=d76c5dc2c169a595e6a90b48d41b110bac7d6a46;hb=587139b9fbf372c79b1650a86fc4d316c36c6bed;hp=3029f61a04c43411da2400f5cf6fb75374dc1a81;hpb=e134fbb2dae380782dc96536cb228727f369a3f3;p=fanfix.git diff --git a/ui/ListModel.java b/ui/ListModel.java index 3029f61..d76c5dc 100644 --- a/ui/ListModel.java +++ b/ui/ListModel.java @@ -14,9 +14,9 @@ import javax.swing.JPopupMenu; import javax.swing.ListCellRenderer; import javax.swing.SwingWorker; -import be.nikiroo.utils.compat.DefaultListModel6; -import be.nikiroo.utils.compat.JList6; -import be.nikiroo.utils.compat.ListCellRenderer6; +import be.nikiroo.utils.ui.compat.DefaultListModel6; +import be.nikiroo.utils.ui.compat.JList6; +import be.nikiroo.utils.ui.compat.ListCellRenderer6; /** * A {@link javax.swing.ListModel} that can maintain 2 lists; one with the @@ -251,7 +251,7 @@ public class ListModel extends DefaultListModel6 { */ @SuppressWarnings({ "unchecked", "rawtypes" }) // JList not in Java 1.6 public ListModel(final JList list, final JPopupMenu popup, - TooltipCreator tooltipCreator) { + final TooltipCreator tooltipCreator) { this.list = list; this.tooltipCreator = tooltipCreator; @@ -275,14 +275,10 @@ public class ListModel extends DefaultListModel6 { hoveredIndex = index; fireElementChanged(oldIndex); fireElementChanged(index); - - Window oldTooltip = tooltip; - tooltip = null; - if (oldTooltip != null) { - oldTooltip.setVisible(false); - } - if (ListModel.this.tooltipCreator != null) { + if (tooltipCreator != null) { + showTooltip(null); + tooltipWatcher.delay("tooltip", new SwingWorker() { @Override @@ -293,12 +289,19 @@ public class ListModel extends DefaultListModel6 { @Override protected void done() { + showTooltip(null); + if (index < 0 || index != hoveredIndex) { return; } - tooltip = newTooltip(index, me); + if (popup != null + && popup.isShowing()) { + return; + } + + showTooltip(newTooltip(index, me)); } }); } @@ -340,6 +343,7 @@ public class ListModel extends DefaultListModel6 { list.locationToIndex(e.getPoint())); } + showTooltip(null); popup.show(list, e.getX(), e.getY()); } } @@ -557,29 +561,45 @@ public class ListModel extends DefaultListModel6 { private Window newTooltip(final int index, final MouseEvent me) { final T value = ListModel.this.get(index); - final Window newTooltip = tooltipCreator.generateTooltip(value, true); - if (newTooltip != null) { newTooltip.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { - Window promotedTooltip = tooltipCreator .generateTooltip(value, false); - promotedTooltip.setLocation(newTooltip.getLocation()); + if (promotedTooltip != null) { + promotedTooltip.setLocation(me.getXOnScreen(), + me.getYOnScreen()); + promotedTooltip.setVisible(true); + } + newTooltip.setVisible(false); - promotedTooltip.setVisible(true); } }); - newTooltip.setLocation(me.getXOnScreen(), me.getYOnScreen()); - newTooltip.setVisible(true); + newTooltip.setLocation(me.getXOnScreen(), me.getYOnScreen()); + showTooltip(newTooltip); } return newTooltip; } + private void showTooltip(Window tooltip) { + synchronized (tooltipCreator) { + if (this.tooltip != null) { + this.tooltip.setVisible(false); + this.tooltip.dispose(); + } + + this.tooltip = tooltip; + + if (tooltip != null) { + tooltip.setVisible(true); + } + } + } + /** * Generate a {@link ListCellRenderer} that supports {@link Hoverable} * elements.