git://git.nikiroo.be
/
nikiroo-utils.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
ListModel sync tooltips
[nikiroo-utils.git]
/
ui
/
ListModel.java
diff --git
a/ui/ListModel.java
b/ui/ListModel.java
index cf16d5f0a111e660171102b3efad3bdefe1d6d48..137897aee45b68bbc682eae949fa8fcd9e15c230 100644
(file)
--- a/
ui/ListModel.java
+++ b/
ui/ListModel.java
@@
-34,6
+34,9
@@
import be.nikiroo.utils.compat.ListCellRenderer6;
public class ListModel<T> extends DefaultListModel6<T> {
private static final long serialVersionUID = 1L;
public class ListModel<T> extends DefaultListModel6<T> {
private static final long serialVersionUID = 1L;
+ /** How long to wait before displaying a tooltip, in milliseconds. */
+ private static final int DELAY_TOOLTIP_MS = 1000;
+
/**
* A filter interface, to check for a condition (note that a Predicate class
* already exists in Java 1.8+, and is compatible with this one if you
/**
* A filter interface, to check for a condition (note that a Predicate class
* already exists in Java 1.8+, and is compatible with this one if you
@@
-254,7
+257,7
@@
public class ListModel<T> extends DefaultListModel6<T> {
list.setModel(this);
list.setModel(this);
- final DelayWorker tooltipWatcher = new DelayWorker(
500
);
+ final DelayWorker tooltipWatcher = new DelayWorker(
DELAY_TOOLTIP_MS
);
if (tooltipCreator != null) {
tooltipWatcher.start();
}
if (tooltipCreator != null) {
tooltipWatcher.start();
}
@@
-273,6
+276,13
@@
public class ListModel<T> extends DefaultListModel6<T> {
fireElementChanged(oldIndex);
fireElementChanged(index);
fireElementChanged(oldIndex);
fireElementChanged(index);
+ synchronized (tooltipWatcher) {
+ if (tooltip != null) {
+ tooltip.setVisible(false);
+ }
+ tooltip = null;
+ }
+
if (ListModel.this.tooltipCreator != null) {
tooltipWatcher.delay("tooltip",
new SwingWorker<Void, Void>() {
if (ListModel.this.tooltipCreator != null) {
tooltipWatcher.delay("tooltip",
new SwingWorker<Void, Void>() {
@@
-284,10
+294,11
@@
public class ListModel<T> extends DefaultListModel6<T> {
@Override
protected void done() {
@Override
protected void done() {
- Window oldTooltip = tooltip;
- tooltip = null;
- if (oldTooltip != null) {
- oldTooltip.setVisible(false);
+ synchronized (tooltipWatcher) {
+ if (tooltip != null) {
+ tooltip.setVisible(false);
+ }
+ tooltip = null;
}
if (index < 0
}
if (index < 0
@@
-295,7
+306,17
@@
public class ListModel<T> extends DefaultListModel6<T> {
return;
}
return;
}
- tooltip = newTooltip(index, me);
+ if (popup != null
+ && popup.isShowing()) {
+ return;
+ }
+
+ synchronized (tooltipWatcher) {
+ if (tooltip != null) {
+ tooltip.setVisible(false);
+ }
+ tooltip = newTooltip(index, me);
+ }
}
});
}
}
});
}
@@
-337,6
+358,12
@@
public class ListModel<T> extends DefaultListModel6<T> {
list.locationToIndex(e.getPoint()));
}
list.locationToIndex(e.getPoint()));
}
+ Window oldTooltip = tooltip;
+ tooltip = null;
+ if (oldTooltip != null) {
+ oldTooltip.setVisible(false);
+ }
+
popup.show(list, e.getX(), e.getY());
}
}
popup.show(list, e.getX(), e.getY());
}
}
@@
-561,16
+588,19
@@
public class ListModel<T> extends DefaultListModel6<T> {
newTooltip.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
newTooltip.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
-
Window promotedTooltip = tooltipCreator
.generateTooltip(value, false);
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);
newTooltip.setVisible(false);
- promotedTooltip.setVisible(true);
}
});
}
});
- newTooltip.setLocation(me.getXOnScreen(), me.getYOnScreen());
+ newTooltip.setLocation(me.getXOnScreen(), me.getYOnScreen());
newTooltip.setVisible(true);
}
newTooltip.setVisible(true);
}