@ -8,10 +8,15 @@ package org.idp.laf;
import java.lang.reflect.Field ;
import java.lang.reflect.InvocationTargetException ;
import java.lang.reflect.Method ;
import java.util.AbstractMap ;
import java.util.ArrayList ;
import java.util.Collection ;
import java.util.HashMap ;
import java.util.LinkedList ;
import java.util.Map ;
import java.util.Set ;
import java.util.prefs.BackingStoreException ;
import java.util.prefs.Preferences ;
import javax.swing.text.AttributeSet ;
import javax.swing.text.SimpleAttributeSet ;
import javax.swing.text.StyleConstants ;
@ -28,12 +33,17 @@ public class TitanEditor {
private static final String EDITOR_SETTINGS_CLASS_NAME = "org.netbeans.api.editor.settings.EditorStyleConstants" ; //NOI18N
private static final String ANNOTATION_TYPE_CLASS_NAME = "org.netbeans.editor.AnnotationType" ; //NOI18N
private static final String PROVIDER_CLASS_NAME = "org.netbeans.modules.versioning.util.OptionsPanelColorProvider" ; //NOI18N
private static final String PROVIDER_GIT_CLASS_NAME = "org.netbeans.modules.git.options.AnnotationColorProvider" ; //NOI18N
private static final String PROVIDER_SVN_CLASS_NAME = "org.netbeans.modules.subversion.options.AnnotationColorProvider" ; //NOI18N
private static final String PROVIDER_HG_CLASS_NAME = "org.netbeans.modules.mercurial.options.AnnotationColorProvider" ; //NOI18N
private static final boolean no_load = false ;
private static Class COLOR_MODEL ;
private static Class EDITOR_SETTINGS ;
private static Class ANNOTATION_TYPE ;
private static Field DisplayName ;
private static Field WaveUnderlineColor ;
@ -71,16 +81,33 @@ public class TitanEditor {
private static final String DEFAULT_THEME_NAME = "NetBeans" ; //NOI18N
private static final String TITAN_THEME_NAME = "[idP!] Titan" ; //NOI18N
private static Class provider_GIT = null ;
private static Class provider_SVN = null ;
private static Class provider_HG = null ;
private static Class provider_CLASS = null ;
private static Method provider_getInstance ;
private static Method provider_getColors ;
private static Method provider_colorsChanged ;
private static ClassLoader working_classLoader = null ;
private static boolean pre_load ( )
{
ClassLoader cl = Lookup . getDefault ( ) . lookup ( ClassLoader . class ) ;
if ( null ! = cl )
working_classLoader = Lookup . getDefault ( ) . lookup ( ClassLoader . class ) ;
if ( null ! = working_ classLoader )
{
try {
COLOR_MODEL = cl . loadClass ( COLOR_MODEL_CLASS_NAME ) ;
EDITOR_SETTINGS = cl . loadClass ( EDITOR_SETTINGS_CLASS_NAME ) ;
ANNOTATION_TYPE = cl . loadClass ( ANNOTATION_TYPE_CLASS_NAME ) ;
COLOR_MODEL = working_classLoader . loadClass ( COLOR_MODEL_CLASS_NAME ) ;
EDITOR_SETTINGS = working_classLoader . loadClass ( EDITOR_SETTINGS_CLASS_NAME ) ;
ANNOTATION_TYPE = working_classLoader . loadClass ( ANNOTATION_TYPE_CLASS_NAME ) ;
DisplayName = EDITOR_SETTINGS . getField ( "DisplayName" ) ; //NOI18N
WaveUnderlineColor = EDITOR_SETTINGS . getField ( "WaveUnderlineColor" ) ; //NOI18N
@ -88,10 +115,7 @@ public class TitanEditor {
getProfiles = COLOR_MODEL . getDeclaredMethod ( "getProfiles" , new Class [ 0 ] ) ; //NOI18N
getCurrentProfile = COLOR_MODEL . getDeclaredMethod ( "getCurrentProfile" , new Class [ 0 ] ) ; //NOI18N
setCurrentProfile = COLOR_MODEL . getDeclaredMethod ( "setCurrentProfile" , String . class ) ; //NOI18N
//public java.net.URL getGlyph()
getHighlight = ANNOTATION_TYPE . getDeclaredMethod ( "getHighlight" , new Class [ 0 ] ) ; //NOI18N
getForegroundColor = ANNOTATION_TYPE . getDeclaredMethod ( "getForegroundColor" , new Class [ 0 ] ) ; //NOI18N
getWaveUnderlineColor = ANNOTATION_TYPE . getDeclaredMethod ( "getWaveUnderlineColor" , new Class [ 0 ] ) ; //NOI18N
@ -100,15 +124,10 @@ public class TitanEditor {
setForegroundColor = ANNOTATION_TYPE . getDeclaredMethod ( "setForegroundColor" , java . awt . Color . class ) ; //NOI18N
setWaveUnderlineColor = ANNOTATION_TYPE . getDeclaredMethod ( "setWaveUnderlineColor" , java . awt . Color . class ) ; //NOI18N
isUseHighlightColor = ANNOTATION_TYPE . getDeclaredMethod ( "isUseHighlightColor" , new Class [ 0 ] ) ; //NOI18N
isInheritForegroundColor = ANNOTATION_TYPE . getDeclaredMethod ( "isInheritForegroundColor" , new Class [ 0 ] ) ; //NOI18N
isUseWaveUnderlineColor = ANNOTATION_TYPE . getDeclaredMethod ( "isUseWaveUnderlineColor" , new Class [ 0 ] ) ; //NOI18N
getAnnotations = COLOR_MODEL . getDeclaredMethod ( "getAnnotations" , String . class ) ; //NOI18N
getHighlightings = COLOR_MODEL . getDeclaredMethod ( "getHighlightings" , String . class ) ; //NOI18N
getCategories = COLOR_MODEL . getDeclaredMethod ( "getCategories" , String . class , String . class ) ; //NOI18N
@ -122,6 +141,35 @@ public class TitanEditor {
const_DisplayName = DisplayName . get ( EDITOR_SETTINGS ) ;
const_WaveUnderlineColor = WaveUnderlineColor . get ( EDITOR_SETTINGS ) ;
colorModel = COLOR_MODEL . newInstance ( ) ;
provider_CLASS = working_classLoader . loadClass ( PROVIDER_CLASS_NAME ) ;
if ( provider_CLASS ! = null )
{
try {
provider_HG = working_classLoader . loadClass ( PROVIDER_HG_CLASS_NAME ) ;
} catch ( ClassNotFoundException ex ) {
//Exceptions.printStackTrace(ex);
}
try {
provider_SVN = working_classLoader . loadClass ( PROVIDER_SVN_CLASS_NAME ) ;
} catch ( ClassNotFoundException ex ) {
//Exceptions.printStackTrace(ex);
}
try {
provider_GIT = working_classLoader . loadClass ( PROVIDER_GIT_CLASS_NAME ) ;
} catch ( ClassNotFoundException ex ) {
//Exceptions.printStackTrace(ex);
}
provider_getColors = provider_CLASS . getDeclaredMethod ( "getColors" , new Class [ 0 ] ) ; //NOI18N
provider_colorsChanged = provider_CLASS . getDeclaredMethod ( "colorsChanged" , Map . class ) ; //NOI18N
}
return true ;
} catch ( ClassNotFoundException ex ) {
Exceptions . printStackTrace ( ex ) ;
@ -166,6 +214,103 @@ public class TitanEditor {
//}
}
private static void extractColorsForModule ( String name , Class provider ) throws IllegalAccessException , IllegalArgumentException , InvocationTargetException
{
;
String res = "// <editor-fold desc=\"" + name + "\" defaultstate=\"collapsed\">" +
"\npublic static final org.idp.laf.Color[] " + name + " = {\n" ;
if ( provider ! = null )
{
ArrayList < org . idp . laf . Color > colors_list = new ArrayList < Color > ( ) ;
try {
provider_getInstance = provider . getDeclaredMethod ( "getInstance" , new Class [ 0 ] ) ; //NOI18N
Object provider_obj = provider_getInstance . invoke ( null , new Object [ 0 ] ) ;
Map < String , java . awt . Color [ ] > colors = ( Map < String , java . awt . Color [ ] > ) provider_getColors . invoke ( provider_obj , new Object [ 0 ] ) ;
for ( String str : colors . keySet ( ) )
{
java . awt . Color [ ] val_arr = colors . get ( str ) ;
java . awt . Color cc = val_arr [ 0 ] ;
//System.out.println("val_arr L = " + val_arr.length);
res + = " " + ( new Color ( str , Color . ColorClass . AT ,
cc . getRed ( ) ,
cc . getGreen ( ) ,
cc . getBlue ( ) ,
cc . getAlpha ( ) , "" ) ) . getString ( ) + ",\n" ;
// colors_list.add);
}
} catch ( NoSuchMethodException ex ) {
Exceptions . printStackTrace ( ex ) ;
} catch ( SecurityException ex ) {
Exceptions . printStackTrace ( ex ) ;
}
for ( org . idp . laf . Color cc : colors_list )
{
res + = cc . getString ( ) + ",\n" ;
}
}
res + = "};\n" ;
res + = "// </editor-fold>\n" ;
System . out . println ( res ) ;
}
private static void applyColorForModule ( Class provider , org . idp . laf . Color [ ] colors_theme ) throws IllegalAccessException , IllegalArgumentException , InvocationTargetException
{
if ( provider ! = null )
{
try
{
provider_getInstance = provider . getDeclaredMethod ( "getInstance" , new Class [ 0 ] ) ; //NOI18N
Object provider_obj = provider_getInstance . invoke ( null , new Object [ 0 ] ) ;
Map < String , java . awt . Color [ ] > colors = ( Map < String , java . awt . Color [ ] > ) provider_getColors . invoke ( provider_obj , new Object [ 0 ] ) ;
Map < String , java . awt . Color > new_colours = new HashMap < String , java . awt . Color > ( ) ;
boolean found_new = false ;
for ( String str : colors . keySet ( ) )
{
found_new = false ;
for ( org . idp . laf . Color cc : colors_theme )
{
if ( cc . getName ( ) . equals ( str ) )
{
java . awt . Color toSet = ( java . awt . Color ) cc . getObject ( ) ;
new_colours . put ( str , toSet ) ;
found_new = true ;
break ;
}
}
if ( ! found_new )
{
new_colours . put ( str , colors . get ( str ) [ 0 ] ) ;
}
}
provider_colorsChanged . invoke ( provider_obj , new_colours ) ;
} catch ( NoSuchMethodException ex ) {
Exceptions . printStackTrace ( ex ) ;
} catch ( SecurityException ex ) {
Exceptions . printStackTrace ( ex ) ;
}
}
}
public static void load_editor ( )
{
if ( ! pre_load ( ) ) return ;
@ -196,6 +341,14 @@ public class TitanEditor {
process_set ( str , category , false ) ;
}
}
extractColorsForModule ( "GIT" , provider_GIT ) ;
extractColorsForModule ( "SVN" , provider_SVN ) ;
extractColorsForModule ( "HG" , provider_HG ) ;
}
else
{
@ -223,7 +376,11 @@ public class TitanEditor {
}
}
applyColorForModule ( provider_GIT , ColorTheme . GIT ) ;
applyColorForModule ( provider_SVN , ColorTheme . SVN ) ;
applyColorForModule ( provider_HG , ColorTheme . HG ) ;
}
} catch ( IllegalAccessException ex ) {
Exceptions . printStackTrace ( ex ) ;