|
What this is
Other links
The source code/* * Sun Public License Notice * * The contents of this file are subject to the Sun Public License * Version 1.0 (the "License"). You may not use this file except in * compliance with the License. A copy of the License is available at * http://www.sun.com/ * * The Original Code is NetBeans. The Initial Developer of the Original * Code is Sun Microsystems, Inc. Portions Copyright 1997-2003 Sun * Microsystems, Inc. All Rights Reserved. */ package org.netbeans.modules.editor; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.io.IOException; import java.util.Hashtable; import java.util.Map; import javax.swing.JEditorPane; import javax.swing.text.EditorKit; import org.netbeans.editor.AnnotationType; import org.netbeans.editor.BaseKit; import org.netbeans.editor.DialogSupport; import org.netbeans.editor.ext.java.JavaSettingsNames; import org.netbeans.editor.LocaleSupport; import org.netbeans.modules.editor.options.AllOptions; import org.netbeans.modules.editor.options.AnnotationTypesFolder; import org.netbeans.modules.editor.options.JavaPrintOptions; import org.netbeans.modules.editor.options.HTMLPrintOptions; import org.netbeans.modules.editor.options.PlainPrintOptions; import org.openide.cookies.EditorCookie; import org.openide.cookies.InstanceCookie; import org.openide.filesystems.FileObject; import org.openide.filesystems.Repository; import org.openide.loaders.DataObject; import org.openide.loaders.DataObjectNotFoundException; import org.openide.modules.ModuleInstall; import org.openide.nodes.Node; import org.openide.options.SystemOption; import org.openide.text.PrintSettings; import org.openide.util.SharedClassObject; import org.openide.windows.TopComponent; import org.netbeans.editor.AnnotationTypes; import org.netbeans.modules.editor.options.BaseOptions; import org.netbeans.editor.ImplementationProvider; import org.netbeans.modules.editor.NbImplementationProvider; import java.util.Iterator; import org.openide.text.CloneableEditor; import java.util.HashSet; import javax.swing.SwingUtilities; import org.netbeans.modules.editor.options.BasePrintOptions; import org.netbeans.modules.editor.options.AllOptionsFolder; /** * Module installation class for editor. * * @author Miloslav Metelka */ public class EditorModule extends ModuleInstall { private static final boolean debug = Boolean.getBoolean("netbeans.debug.editor.kits"); /** PrintOptions to be installed */ static Class[] printOpts = new Class[] { PlainPrintOptions.class, JavaPrintOptions.class, HTMLPrintOptions.class }; static boolean inited = false; public static void init(){ if (inited) return; inited = true; // moved here to fix #27418 NbEditorSettingsInitializer.init(); PrintSettings ps = (PrintSettings) SharedClassObject.findObject(PrintSettings.class, true); // Start listening on addition/removal of print options BasePrintOptions bpo = (BasePrintOptions) BasePrintOptions.findObject(BasePrintOptions.class, true); bpo.init(); for (int i = 0; i < printOpts.length; i++) { ps.addOption((SystemOption)SharedClassObject.findObject(printOpts[i], true)); } } /** Module installed again. */ public void restored () { LocaleSupport.addLocalizer(new NbLocalizer(AllOptions.class)); LocaleSupport.addLocalizer(new NbLocalizer(BaseKit.class)); LocaleSupport.addLocalizer(new NbLocalizer(JavaSettingsNames.class)); // Initializations DialogSupport.setDialogFactory( new NbDialogSupport() ); ImplementationProvider.registerDefault(new NbImplementationProvider()); // register loader for annotation types AnnotationTypes.getTypes().registerLoader( new AnnotationTypes.Loader() { public void loadTypes() { AnnotationTypesFolder.getAnnotationTypesFolder(); } public void loadSettings() { // AnnotationType properties are stored in BaseOption, so let's read them now BaseOptions bo = (BaseOptions)BaseOptions.findObject(BaseOptions.class, true); Integer i = (Integer)bo.getSettingValue(AnnotationTypes.PROP_BACKGROUND_GLYPH_ALPHA); if (i != null) AnnotationTypes.getTypes().setBackgroundGlyphAlpha(i.intValue()); Boolean b = (Boolean)bo.getSettingValue(AnnotationTypes.PROP_BACKGROUND_DRAWING); if (b != null) AnnotationTypes.getTypes().setBackgroundDrawing(b); b = (Boolean)bo.getSettingValue(AnnotationTypes.PROP_COMBINE_GLYPHS); if (b != null) AnnotationTypes.getTypes().setCombineGlyphs(b); b = (Boolean)bo.getSettingValue(AnnotationTypes.PROP_GLYPHS_OVER_LINE_NUMBERS); if (b != null) AnnotationTypes.getTypes().setGlyphsOverLineNumbers(b); b = (Boolean)bo.getSettingValue(AnnotationTypes.PROP_SHOW_GLYPH_GUTTER); if (b != null) AnnotationTypes.getTypes().setShowGlyphGutter(b); } public void saveType(AnnotationType type) { AnnotationTypesFolder.getAnnotationTypesFolder().saveAnnotationType(type); } public void saveSetting(String settingName, Object value) { // AnnotationType properties are stored to BaseOption BaseOptions bo = (BaseOptions)BaseOptions.findObject(BaseOptions.class, true); bo.setSettingValue(settingName, value); } } ); // Autoregistration try { Field keyField = JEditorPane.class.getDeclaredField("kitRegistryKey"); // NOI18N keyField.setAccessible(true); Object key = keyField.get(JEditorPane.class); Hashtable kitMapping = (Hashtable)sun.awt.AppContext.getAppContext().get(key); sun.awt.AppContext.getAppContext().put(key, new HackMap(kitMapping)); } catch (Throwable t) { t.printStackTrace(); } // Registration of the editor kits to JEditorPane // for (int i = 0; i < replacements.length; i++) { // JEditorPane.registerEditorKitForContentType( // replacements[i].contentType, // replacements[i].newKitClassName, // getClass().getClassLoader() // ); // } } /** Called when module is uninstalled. Overrides superclass method. */ public void uninstalled() { AllOptionsFolder.unregisterModuleRegListener(); // Options PrintSettings ps = (PrintSettings) SharedClassObject.findObject(PrintSettings.class, true); for (int i = 0; i < printOpts.length; i++) { ps.removeOption((SystemOption)SharedClassObject.findObject(printOpts[i], true)); } // unregister our registry try { Field keyField = JEditorPane.class.getDeclaredField("kitRegistryKey"); // NOI18N keyField.setAccessible(true); Object key = keyField.get(JEditorPane.class); HackMap kitMapping = (HackMap)sun.awt.AppContext.getAppContext().get(key); if (kitMapping.getOriginal() != null) { sun.awt.AppContext.getAppContext().put(key, kitMapping.getOriginal()); } else { sun.awt.AppContext.getAppContext().remove(key); } } catch (Throwable t) { t.printStackTrace(); } // #42970 - Possible closing of opened editor top components must happen in AWT thread SwingUtilities.invokeLater(new Runnable() { public void run() { // issue #16110 // close all TopComponents which contain editor based on BaseKit HashSet set = new HashSet(); set.addAll(TopComponent.getRegistry().getOpened()); for (Iterator it = set.iterator(); it.hasNext(); ) { TopComponent topComp = (TopComponent)it.next(); // top components in which we are interested must be of type CloneableEditor if (!(topComp instanceof CloneableEditor)) continue; Node[] arr = topComp.getActivatedNodes(); if (arr == null) continue; for (int i=0; i |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.