FlatInspector: limit parent level to real depth at mouse location (issue #169)

This commit is contained in:
Karl Tauber
2020-09-11 17:37:40 +02:00
parent c44905ea5e
commit 147e400bd6

View File

@@ -158,10 +158,20 @@ public class FlatInspector
} else if( id == KeyEvent.KEY_RELEASED && wasCtrlOrShiftKeyPressed ) { } else if( id == KeyEvent.KEY_RELEASED && wasCtrlOrShiftKeyPressed ) {
if( keyCode == KeyEvent.VK_CONTROL ) { if( keyCode == KeyEvent.VK_CONTROL ) {
inspectParentLevel++; inspectParentLevel++;
inspect( lastX, lastY ); int parentLevel = inspect( lastX, lastY );
// limit level
if( inspectParentLevel > parentLevel )
inspectParentLevel = parentLevel;
} else if( keyCode == KeyEvent.VK_SHIFT && inspectParentLevel > 0 ) { } else if( keyCode == KeyEvent.VK_SHIFT && inspectParentLevel > 0 ) {
inspectParentLevel--; inspectParentLevel--;
inspect( lastX, lastY ); int parentLevel = inspect( lastX, lastY );
// decrease level
if( inspectParentLevel > parentLevel ) {
inspectParentLevel = Math.max( parentLevel - 1, 0 );
inspect( lastX, lastY );
}
} }
} }
@@ -248,24 +258,28 @@ public class FlatInspector
} ); } );
} }
private void inspect( int x, int y ) { private int inspect( int x, int y ) {
Point pt = SwingUtilities.convertPoint( rootPane.getGlassPane(), x, y, rootPane ); Point pt = SwingUtilities.convertPoint( rootPane.getGlassPane(), x, y, rootPane );
Component c = getDeepestComponentAt( rootPane, pt.x, pt.y ); Component c = getDeepestComponentAt( rootPane, pt.x, pt.y );
int parentLevel = 0;
for( int i = 0; i < inspectParentLevel && c != null; i++ ) { for( int i = 0; i < inspectParentLevel && c != null; i++ ) {
Container parent = c.getParent(); Container parent = c.getParent();
if( parent == null ) if( parent == null )
break; break;
c = parent; c = parent;
parentLevel++;
} }
if( c == lastComponent ) if( c == lastComponent )
return; return parentLevel;
lastComponent = c; lastComponent = c;
highlight( c ); highlight( c );
showToolTip( c, x, y ); showToolTip( c, x, y, parentLevel );
return parentLevel;
} }
private Component getDeepestComponentAt( Component parent, int x, int y ) { private Component getDeepestComponentAt( Component parent, int x, int y ) {
@@ -338,7 +352,7 @@ public class FlatInspector
return c; return c;
} }
private void showToolTip( Component c, int x, int y ) { private void showToolTip( Component c, int x, int y, int parentLevel ) {
if( c == null ) { if( c == null ) {
if( tip != null ) if( tip != null )
tip.setVisible( false ); tip.setVisible( false );
@@ -356,7 +370,7 @@ public class FlatInspector
} else } else
tip.setVisible( true ); tip.setVisible( true );
tip.setTipText( buildToolTipText( c ) ); tip.setTipText( buildToolTipText( c, parentLevel ) );
int tx = x + UIScale.scale( 8 ); int tx = x + UIScale.scale( 8 );
int ty = y + UIScale.scale( 16 ); int ty = y + UIScale.scale( 16 );
@@ -377,7 +391,7 @@ public class FlatInspector
tip.repaint(); tip.repaint();
} }
private String buildToolTipText( Component c ) { private static String buildToolTipText( Component c, int parentLevel ) {
String name = c.getClass().getName(); String name = c.getClass().getName();
name = name.substring( name.lastIndexOf( '.' ) + 1 ); name = name.substring( name.lastIndexOf( '.' ) + 1 );
@@ -441,10 +455,10 @@ public class FlatInspector
text += "Left-to-right: " + c.getComponentOrientation().isLeftToRight() + '\n'; text += "Left-to-right: " + c.getComponentOrientation().isLeftToRight() + '\n';
text += "Parent: " + (c.getParent() != null ? c.getParent().getClass().getName() : "null"); text += "Parent: " + (c.getParent() != null ? c.getParent().getClass().getName() : "null");
if( inspectParentLevel > 0 ) if( parentLevel > 0 )
text += "\n\nParent level: " + inspectParentLevel; text += "\n\nParent level: " + parentLevel;
if( inspectParentLevel > 0 ) if( parentLevel > 0 )
text += "\n(press Ctrl/Shift to increase/decrease level)"; text += "\n(press Ctrl/Shift to increase/decrease level)";
else else
text += "\n\n(press Ctrl key to inspect parent)"; text += "\n\n(press Ctrl key to inspect parent)";