mirror of
https://github.com/JFormDesigner/FlatLaf.git
synced 2025-12-06 22:10:54 +03:00
Theme Editor:
- auto-activate key completion on any letter - special completion provider for references
This commit is contained in:
@@ -42,6 +42,7 @@ class FlatCompletionProvider
|
|||||||
extends CompletionProviderBase
|
extends CompletionProviderBase
|
||||||
{
|
{
|
||||||
private KeyCompletionProvider keyProvider;
|
private KeyCompletionProvider keyProvider;
|
||||||
|
private ReferenceCompletionProvider referenceProvider;
|
||||||
private ValueCompletionProvider valueProvider;
|
private ValueCompletionProvider valueProvider;
|
||||||
|
|
||||||
FlatCompletionProvider() {
|
FlatCompletionProvider() {
|
||||||
@@ -72,18 +73,9 @@ class FlatCompletionProvider
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isAutoActivateOkay( JTextComponent tc ) {
|
public boolean isAutoActivateOkay( JTextComponent comp ) {
|
||||||
int caretPosition = tc.getCaretPosition();
|
CompletionProvider provider = getProviderFor( comp );
|
||||||
if( caretPosition <= 0 )
|
return (provider != null) ? provider.isAutoActivateOkay( comp ) : null;
|
||||||
return false;
|
|
||||||
|
|
||||||
try {
|
|
||||||
char ch = tc.getText( caretPosition - 1, 1 ).charAt( 0 );
|
|
||||||
return ch == '$';
|
|
||||||
} catch( BadLocationException | IndexOutOfBoundsException ex ) {
|
|
||||||
// ignore
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private CompletionProvider getProviderFor( JTextComponent comp ) {
|
private CompletionProvider getProviderFor( JTextComponent comp ) {
|
||||||
@@ -117,7 +109,7 @@ class FlatCompletionProvider
|
|||||||
return getValueProvider();
|
return getValueProvider();
|
||||||
|
|
||||||
case '$':
|
case '$':
|
||||||
return getKeyProvider();
|
return getReferenceProvider();
|
||||||
|
|
||||||
case ' ':
|
case ' ':
|
||||||
case '\t':
|
case '\t':
|
||||||
@@ -134,30 +126,36 @@ class FlatCompletionProvider
|
|||||||
|
|
||||||
private CompletionProvider getKeyProvider() {
|
private CompletionProvider getKeyProvider() {
|
||||||
if( keyProvider == null )
|
if( keyProvider == null )
|
||||||
keyProvider = KeyCompletionProvider.getInstance();
|
keyProvider = new KeyCompletionProvider();
|
||||||
return keyProvider;
|
return keyProvider;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private CompletionProvider getReferenceProvider() {
|
||||||
|
if( referenceProvider == null )
|
||||||
|
referenceProvider = new ReferenceCompletionProvider();
|
||||||
|
return referenceProvider;
|
||||||
|
}
|
||||||
|
|
||||||
private CompletionProvider getValueProvider() {
|
private CompletionProvider getValueProvider() {
|
||||||
if( valueProvider == null )
|
if( valueProvider == null )
|
||||||
valueProvider = new ValueCompletionProvider();
|
valueProvider = new ValueCompletionProvider();
|
||||||
return valueProvider;
|
return valueProvider;
|
||||||
}
|
}
|
||||||
|
|
||||||
//---- class KeyCompletionProvider ----------------------------------------
|
//---- class KnownKeysCompletionProvider ----------------------------------
|
||||||
|
|
||||||
private static class KeyCompletionProvider
|
private static final class KnownKeysCompletionProvider
|
||||||
extends DefaultCompletionProvider
|
extends DefaultCompletionProvider
|
||||||
{
|
{
|
||||||
private static KeyCompletionProvider instance;
|
private static KnownKeysCompletionProvider instance;
|
||||||
|
|
||||||
static KeyCompletionProvider getInstance() {
|
static KnownKeysCompletionProvider getInstance() {
|
||||||
if( instance == null )
|
if( instance == null )
|
||||||
instance = new KeyCompletionProvider();
|
instance = new KnownKeysCompletionProvider();
|
||||||
return instance;
|
return instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
KeyCompletionProvider() {
|
KnownKeysCompletionProvider() {
|
||||||
// load all keys
|
// load all keys
|
||||||
HashSet<String> keys = new HashSet<>();
|
HashSet<String> keys = new HashSet<>();
|
||||||
try {
|
try {
|
||||||
@@ -179,8 +177,11 @@ class FlatCompletionProvider
|
|||||||
HashSet<String> keyParts = new HashSet<>();
|
HashSet<String> keyParts = new HashSet<>();
|
||||||
for( String key : keys ) {
|
for( String key : keys ) {
|
||||||
int delimIndex = key.length() + 1;
|
int delimIndex = key.length() + 1;
|
||||||
while( (delimIndex = key.lastIndexOf( '.', delimIndex - 1 )) >= 0 )
|
while( (delimIndex = key.lastIndexOf( '.', delimIndex - 1 )) >= 0 ) {
|
||||||
keyParts.add( key.substring( 0, delimIndex + 1 ) );
|
String part = key.substring( 0, delimIndex );
|
||||||
|
if( !keys.contains( part ) )
|
||||||
|
keyParts.add( part );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// add key parts
|
// add key parts
|
||||||
@@ -196,6 +197,51 @@ class FlatCompletionProvider
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//---- class KeyCompletionProvider ----------------------------------------
|
||||||
|
|
||||||
|
private static class KeyCompletionProvider
|
||||||
|
extends DefaultCompletionProvider
|
||||||
|
{
|
||||||
|
KeyCompletionProvider() {
|
||||||
|
setParent( KnownKeysCompletionProvider.getInstance() );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean isValidChar( char ch ) {
|
||||||
|
return super.isValidChar( ch ) || ch == '.';
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isAutoActivateOkay( JTextComponent comp ) {
|
||||||
|
int caretPosition = comp.getCaretPosition();
|
||||||
|
if( caretPosition <= 0 )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
try {
|
||||||
|
char ch = comp.getText( caretPosition - 1, 1 ).charAt( 0 );
|
||||||
|
return isAutoActivateOkay( ch );
|
||||||
|
} catch( BadLocationException | IndexOutOfBoundsException ex ) {
|
||||||
|
// ignore
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected boolean isAutoActivateOkay( char ch ) {
|
||||||
|
return Character.isLetter( ch ) || ch == '.';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//---- class ReferenceCompletionProvider ----------------------------------
|
||||||
|
|
||||||
|
private static class ReferenceCompletionProvider
|
||||||
|
extends KeyCompletionProvider
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
protected boolean isAutoActivateOkay( char ch ) {
|
||||||
|
return ch == '$' || super.isAutoActivateOkay( ch );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//---- class ValueCompletionProvider --------------------------------------
|
//---- class ValueCompletionProvider --------------------------------------
|
||||||
|
|
||||||
private static class ValueCompletionProvider
|
private static class ValueCompletionProvider
|
||||||
@@ -254,5 +300,10 @@ class FlatCompletionProvider
|
|||||||
f.setParams( params );
|
f.setParams( params );
|
||||||
addCompletion( f );
|
addCompletion( f );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isAutoActivateOkay( JTextComponent tc ) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user