Ticket #2439: skinning-improvement.patch

File skinning-improvement.patch, 65.4 KB (added by tanya, 15 years ago)
  • modules/org.sophie2.main.func.help/src/main/java/org/sophie2/main/func/help/HelpModule.java

    ### Eclipse Workspace Patch 1.0
    #P sophie
     
    1313import org.sophie2.base.layout.model.MainWindow; 
    1414import org.sophie2.base.menus.MenuMember; 
    1515import org.sophie2.base.skins.BaseSkinPart; 
    16 import org.sophie2.base.skins.SimpleSkinPartsProvider; 
     16import org.sophie2.base.skins.SkinManager; 
    1717import org.sophie2.base.skins.SkinUtil; 
    18 import org.sophie2.base.skins.SkinsNames; 
     18import org.sophie2.base.skins.providers.SimpleSkinPartsProvider; 
    1919import org.sophie2.base.visual.BaseVisualElement; 
    2020import org.sophie2.base.visual.SimpleVisualProvider; 
    2121import org.sophie2.core.modularity.SimpleSophieExtension; 
     
    173173                res.add(SimpleVisualProvider.createExtension(BugReportDialog.UserExplanationField.class, 
    174174                                MainWindow.class, "user-explanation-field", "kkk-user-explanation-field")); 
    175175                 
    176                 BaseSkinPart part = new BaseSkinPart(SkinsNames.LANGUAGE_PACK_NAME); 
     176                BaseSkinPart part = new BaseSkinPart(SkinManager.LANGUAGE_PACK_NAME); 
    177177                part.add(SkinUtil.getElementId(SaveBugReportButton.class), BaseVisualElement.TITLE_PROP_ID, "Save as File..."); 
    178178                part.add(SkinUtil.getElementId(SaveBugReportButton.class), BaseVisualElement.TOOL_TIP_PROP_ID, "Save the bug report to a file"); 
    179179                part.add(SkinUtil.getElementId(CancelBugReportButton.class), BaseVisualElement.TITLE_PROP_ID, "Cancel"); 
     
    186186                SimpleSkinPartsProvider skinParts = new SimpleSkinPartsProvider();  
    187187                skinParts.parts().add(part); 
    188188                skinParts.parts().add(makeSkinPart()); 
    189                 skinParts.parts().add(makeLangSkinPart()); 
     189                skinParts.parts().add(makeLanguagePackPart()); 
    190190                 
    191191                res.add(skinParts.asExtension()); 
    192192        } 
     
    207207                return res; 
    208208        } 
    209209         
    210         private BaseSkinPart makeLangSkinPart() { 
    211                 BaseSkinPart res = new BaseSkinPart(SkinsNames.LANGUAGE_PACK_NAME); 
     210        private BaseSkinPart makeLanguagePackPart() { 
     211                BaseSkinPart res = new BaseSkinPart(SkinManager.LANGUAGE_PACK_NAME); 
    212212 
    213213                res.add(SkinUtil.getElementId(HelpMenu.class), BaseVisualElement.TITLE_PROP_ID, "Help"); 
    214214                res.add(SkinUtil.getElementId(HelpMenu.class), BaseVisualElement.TOOL_TIP_PROP_ID, 
  • modules/org.sophie2.base.skins/src/main/java/org/sophie2/base/skins/SkinPartsProvider.java

     
    1 package org.sophie2.base.skins; 
    2  
    3 import org.sophie2.core.prolib.interfaces.ListProp; 
    4  
    5 /** 
    6  * Extension point providing a list of base skin parts which are to be used in 
    7  * the current skin. 
    8  *  
    9  * @author tanya 
    10  */ 
    11 public interface SkinPartsProvider { 
    12  
    13         /** 
    14          * List of {@link SkinPart}s which are to be used in the current skin. 
    15          * @return 
    16          *                      List of skin parts. 
    17          */ 
    18         ListProp<SkinPart> parts(); 
    19 } 
  • modules/org.sophie2.main.func.servers/src/main/java/org/sophie2/main/func/servers/MainFuncServersModule.java

     
    1010import org.sophie2.base.model.resources.r4.resources.ResourceR4; 
    1111import org.sophie2.base.persistence.persister.Persister; 
    1212import org.sophie2.base.skins.BaseSkinPart; 
    13 import org.sophie2.base.skins.SimpleSkinPartsProvider; 
     13import org.sophie2.base.skins.SkinManager; 
    1414import org.sophie2.base.skins.SkinUtil; 
    15 import org.sophie2.base.skins.SkinsNames; 
     15import org.sophie2.base.skins.providers.SimpleSkinPartsProvider; 
    1616import org.sophie2.base.visual.AutoVisualProvider; 
    1717import org.sophie2.base.visual.BaseVisualElement; 
    1818import org.sophie2.base.visual.SimpleVisualProvider; 
     
    116116                 
    117117                SimpleSkinPartsProvider provider = new SimpleSkinPartsProvider(); 
    118118                provider.parts().add(makeSkinPart()); 
    119                 provider.parts().add(makeLangSkinPart()); 
     119                provider.parts().add(makeLanguagePackPart()); 
    120120                res.add(provider.asExtension()); 
    121121                 
    122122                 
     
    158158                return res; 
    159159        } 
    160160         
    161         private BaseSkinPart makeLangSkinPart() { 
    162                 BaseSkinPart res = new BaseSkinPart(SkinsNames.LANGUAGE_PACK_NAME); 
     161        private BaseSkinPart makeLanguagePackPart() { 
     162                BaseSkinPart res = new BaseSkinPart(SkinManager.LANGUAGE_PACK_NAME); 
    163163 
    164164                res.add(SkinUtil.getElementId(ServersTab.class), 
    165165                                BaseVisualElement.TITLE_PROP_ID, "Servers"); 
  • modules/org.sophie2.main.func.media/src/main/java/org/sophie2/main/func/media/MainFuncMediaModule.java

     
    1010import org.sophie2.base.model.resources.r4.resources.ResourceR4; 
    1111import org.sophie2.base.persistence.persister.Persister; 
    1212import org.sophie2.base.skins.BaseSkinPart; 
    13 import org.sophie2.base.skins.SimpleSkinPartsProvider; 
     13import org.sophie2.base.skins.SkinManager; 
    1414import org.sophie2.base.skins.SkinUtil; 
    15 import org.sophie2.base.skins.SkinsNames; 
     15import org.sophie2.base.skins.providers.SimpleSkinPartsProvider; 
    1616import org.sophie2.base.visual.AutoVisualProvider; 
    1717import org.sophie2.base.visual.SimpleVisualProvider; 
    1818import org.sophie2.base.visual.VisualElement; 
     
    212212                 
    213213                SimpleSkinPartsProvider provider = new SimpleSkinPartsProvider(); 
    214214                provider.parts().add(initSkin()); 
    215                 provider.parts().add(initLangSkin()); 
     215                provider.parts().add(initLanguagePack()); 
    216216                res.add(provider.asExtension()); 
    217217                 
    218218        } 
     
    235235                return part; 
    236236        } 
    237237         
    238         private BaseSkinPart initLangSkin() { 
    239                 BaseSkinPart part = new BaseSkinPart(SkinsNames.LANGUAGE_PACK_NAME); 
     238        private BaseSkinPart initLanguagePack() { 
     239                BaseSkinPart part = new BaseSkinPart(SkinManager.LANGUAGE_PACK_NAME); 
    240240 
    241241                part.add(SkinUtil.getElementId(AudioResourceR4.class),  
    242242                                ResourcesPalette.SEPARATOR_TITLE_PROP_ID, "Audio"); 
  • modules/org.sophie2.main.func.file/src/main/java/org/sophie2/main/func/file/dialogs/FileIcon.java

     
    1010import org.sophie2.base.commons.util.ImageUtil; 
    1111import org.sophie2.base.commons.util.ImmImage; 
    1212import org.sophie2.base.skins.BaseSkinPart; 
    13 import org.sophie2.base.skins.SimpleSkinPartsProvider; 
    1413import org.sophie2.base.skins.Skin; 
    1514import org.sophie2.base.skins.SkinElementId; 
    1615import org.sophie2.base.skins.SkinUtil; 
     16import org.sophie2.base.skins.providers.SimpleSkinPartsProvider; 
    1717import org.sophie2.core.modularity.SimpleSophieExtension; 
    1818import org.sophie2.core.modularity.SophieExtension; 
    1919import org.sophie2.core.modularity.SortKey; 
  • modules/org.sophie2.base.skins/src/main/java/org/sophie2/base/skins/SkinsNames.java

     
    1 package org.sophie2.base.skins; 
    2  
    3 /** 
    4  * The names of the two {@link Skin}s that are currently supported. 
    5  *  
    6  * @author peko, nenko 
    7  * 
    8  */ 
    9 public interface SkinsNames { 
    10         /** 
    11          * The name of the default skin. 
    12          */ 
    13         public final static String DEFAULT_NAME = "default:en"; 
    14          
    15         /** 
    16          * The name of the default language skin. 
    17          */ 
    18         public final static String LANGUAGE_PACK_NAME = "language:en"; 
    19 } 
  • modules/org.sophie2.extra.func.pdf/src/main/java/org/sophie2/extra/func/pdf/PdfModule.java

     
    66import org.sophie2.base.model.resources.r4.resources.ResourceR4; 
    77import org.sophie2.base.persistence.persister.Persister; 
    88import org.sophie2.base.skins.BaseSkinPart; 
    9 import org.sophie2.base.skins.SimpleSkinPartsProvider; 
     9import org.sophie2.base.skins.SkinManager; 
    1010import org.sophie2.base.skins.SkinUtil; 
    11 import org.sophie2.base.skins.SkinsNames; 
     11import org.sophie2.base.skins.providers.SimpleSkinPartsProvider; 
    1212import org.sophie2.base.visual.AutoVisualProvider; 
    1313import org.sophie2.base.visual.SimpleVisualProvider; 
    1414import org.sophie2.base.visual.VisualElement; 
     
    104104         
    105105                SimpleSkinPartsProvider provider = new SimpleSkinPartsProvider(); 
    106106                provider.parts().add(initSkin()); 
    107                 provider.parts().add(initLangSkin()); 
     107                provider.parts().add(initLanguagePack()); 
    108108                res.add(provider.asExtension()); 
    109                  
    110 //              SimpleSkinPartsProvider provider2 = new SimpleSkinPartsProvider(); 
    111 //              provider2.parts().add(initLangSkin()); 
    112 //              res.add(provider2.asExtension()); 
    113                  
    114 //              res.add(initSkin().asExtension()); 
    115 //              res.add(initLangSkin().asExtension()); 
    116109        } 
    117110         
    118111        private BaseSkinPart initSkin() { 
     
    128121                return part; 
    129122        } 
    130123         
    131         private BaseSkinPart initLangSkin() { 
    132                 BaseSkinPart part = new BaseSkinPart(SkinsNames.LANGUAGE_PACK_NAME); 
     124        private BaseSkinPart initLanguagePack() { 
     125                BaseSkinPart part = new BaseSkinPart(SkinManager.LANGUAGE_PACK_NAME); 
    133126                 
    134127                part.add(SkinUtil.getElementId(PdfResourceR4.class),  
    135128                                ResourcesPalette.SEPARATOR_TITLE_PROP_ID, "PDF"); 
  • modules/org.sophie2.main.func.text/src/main/java/org/sophie2/main/func/text/TextFuncModule.java

     
    88import org.sophie2.base.persistence.persister.Persister; 
    99import org.sophie2.base.persistence.persister.impl.EnumPersister; 
    1010import org.sophie2.base.skins.BaseSkinPart; 
    11 import org.sophie2.base.skins.SimpleSkinPartsProvider; 
     11import org.sophie2.base.skins.SkinManager; 
    1212import org.sophie2.base.skins.SkinUtil; 
    13 import org.sophie2.base.skins.SkinsNames; 
     13import org.sophie2.base.skins.providers.SimpleSkinPartsProvider; 
    1414import org.sophie2.base.visual.AutoVisualProvider; 
    1515import org.sophie2.base.visual.VisualElement; 
    1616import org.sophie2.core.modularity.SimpleSophieExtension; 
     
    139139                 
    140140                SimpleSkinPartsProvider provider = new SimpleSkinPartsProvider(); 
    141141                provider.parts().add(initSkin()); 
    142                 provider.parts().add(initLangSkin()); 
     142                provider.parts().add(initLanguagePack()); 
    143143                res.add(provider.asExtension()); 
    144144        } 
    145145         
     
    155155                return part; 
    156156        } 
    157157         
    158         private BaseSkinPart initLangSkin() { 
    159                 BaseSkinPart part = new BaseSkinPart(SkinsNames.LANGUAGE_PACK_NAME); 
     158        private BaseSkinPart initLanguagePack() { 
     159                BaseSkinPart part = new BaseSkinPart(SkinManager.LANGUAGE_PACK_NAME); 
    160160                part.add(SkinUtil.getElementId(HotTextResourceR4.class),  
    161161                                ResourcesPalette.SEPARATOR_TITLE_PROP_ID, "Texts"); 
    162162                 
  • modules/org.sophie2.base.skins/src/main/java/org/sophie2/base/skins/SimpleSkinPartsProvider.java

     
    1 package org.sophie2.base.skins; 
    2  
    3 import org.sophie2.core.modularity.SimpleSophieExtension; 
    4 import org.sophie2.core.prolib.impl.BaseProObject; 
    5 import org.sophie2.core.prolib.interfaces.RwListProp; 
    6  
    7 /** 
    8  * Simple implementation of {@link SkinPartsProvider}. 
    9  *  
    10  * @author tanya 
    11  */ 
    12 public class SimpleSkinPartsProvider extends BaseProObject implements SkinPartsProvider { 
    13  
    14         public RwListProp<SkinPart> parts() { 
    15                 return getBean().makeListProp("parts", SkinPart.class); 
    16         } 
    17  
    18         /** 
    19          * Creates an extension to the extension point with {@link SkinPartsProvider} interface.  
    20          *  
    21          * @return  
    22          *              The created extension. 
    23          */ 
    24         public SimpleSophieExtension<SkinPartsProvider> asExtension() { 
    25                 return new SimpleSophieExtension<SkinPartsProvider>( 
    26                                 SkinPartsProvider.class, this); 
    27         } 
    28 } 
  • modules/org.sophie2.main.app.menus/src/main/java/org/sophie2/main/app/menus/skins/DefaultSkinItem.java

     
    77import org.sophie2.base.menus.MenuItem; 
    88import org.sophie2.base.skins.SkinElementId; 
    99import org.sophie2.base.skins.SkinManager; 
    10 import org.sophie2.base.skins.SkinsNames; 
    1110import org.sophie2.base.visual.skins.ElementPartCreator; 
    1211import org.sophie2.base.visual.skins.SkinPartDef; 
    1312import org.sophie2.base.visual.skins.VisualElementDef; 
     
    3736         
    3837        @Override 
    3938        protected ImmImage computeIcon() { 
    40                 if(SkinManager.get().currentSkin().get().name().get().equals(SkinsNames.DEFAULT_NAME)) { 
     39                if(SkinManager.get().currentSkin().get().skinName().get().equals(SkinManager.DEFAULT_NAME)) { 
    4140                        return super.computeIcon(); 
    4241                } 
    4342                 
  • modules/org.sophie2.base.skins/src/main/java/org/sophie2/base/skins/SkinUtil.java

     
    5252         * @return 
    5353         *               The value from the current skin. 
    5454         */ 
    55         public static <T> T searchSkin(final Class<?> elementClass, String propId, 
     55        private static <T> T searchSkin(final Class<?> elementClass, String propId, 
    5656                        Class<T> valueClass, Skin skin) { 
    5757                 
    5858                T res = null; 
     
    6868                        res = skin.getValue(elementId, propId, valueClass); 
    6969                } 
    7070                 
    71                 if (res == null) { 
    72                         searchSkin(elementClass, propId, valueClass, skin.fallBack().get()); 
    73                 } 
    74                  
    7571                return res; 
    7672        } 
    7773         
     
    108104                                return res; 
    109105                        } 
    110106                         
    111                         Skin defaultLanguageSkin = SkinManager.get().getDefaultLanguageSkin(); 
    112                         res = searchSkin(elementClass, propId, valueClass, defaultLanguageSkin); 
     107                        Skin defaultLanguagePack = SkinManager.get().getDefaultLanguagePack(); 
     108                        res = searchSkin(elementClass, propId, valueClass, defaultLanguagePack); 
    113109                         
    114110                        return res; 
    115111                }  
  • modules/org.sophie2.base.skins/src/main/java/org/sophie2/base/skins/Skin.java

     
    55 
    66import org.sophie2.base.commons.structures.ImmTreeList; 
    77import org.sophie2.base.commons.util.ImmList; 
     8import org.sophie2.base.skins.providers.SkinPartsProvider; 
    89import org.sophie2.core.logging.SophieLog; 
    910import org.sophie2.core.modularity.SophieExtension; 
    1011import org.sophie2.core.prolib.impl.AutoListProperty; 
     
    5556         *  
    5657         * @return The property. 
    5758         */ 
    58         public RwProp<String> name() { 
     59        private RwProp<String> name() { 
    5960                return getBean().makeValueProp("name", String.class); 
    6061        } 
    6162 
     
    6566         *  
    6667         * @return The property. 
    6768         */ 
    68         RwProp<Skin> fallBack() { 
     69        public RwProp<Skin> fallBack() { 
    6970                return getBean().makeValueProp("fallBack", Skin.class); 
    7071        } 
    7172 
     
    8182         *             
    8283         * @return The value, or null if it can not be found. 
    8384         */ 
    84         public <T> T getValue(String recordId, Class<T> valueClass) { 
     85        protected <T> T getValue(String recordId, Class<T> valueClass) { 
    8586                assert recordId != null; 
    8687 
    8788                List<ListEntry> entries = records().get().findAll(recordId); 
     
    107108                                "Can not locate requested item: " + recordId); 
    108109                return null; 
    109110        } 
    110  
    111 //      private Prop<ImmList<SkinPart>> skinParts() { 
    112 //              class skinParts extends AutoProperty<ImmList<SkinPart>> { 
    113 // 
    114 //                      @Override 
    115 //                      protected ImmList<SkinPart> compute() { 
    116 //                              ImmList<SkinPart> res = ImmTreeList.<SkinPart>empty(); 
    117 // 
    118 //                              for (SophieExtension<SkinPart> ex :  
    119 //                                      BaseSkinsModule.get().getSkinPartsPoint().extensions().get()) { 
    120 // 
    121 //                                      if (ex.getObject().skinName().get().equals(name().get())) { 
    122 //                                              res = res.add(ex.getObject()); 
    123 //                                      } 
    124 //                              } 
    125 //                              return res; 
    126 //                      } 
    127 //              } 
    128 //              return getBean().makeProp(skinParts.class); 
    129 //      } 
    130111         
    131112        private Prop<ImmList<SkinPart>> skinParts() { 
    132113                class skinParts extends AutoProperty<ImmList<SkinPart>> { 
     
    140121 
    141122                                        for (SkinPart part : ex.getObject().parts().get()) { 
    142123                                                 
    143                                                 if (part.skinName().get().equals(name().get())) { 
     124                                                if (part.skinName().get().equals(skinName().get())) { 
    144125                                                        res = res.add(part); 
    145126                                                } 
    146127                                        } 
    147128                                } 
    148129                                         
    149 //                              for (SophieExtension<SkinPart> e :  
    150 //                                      BaseSkinsModule.get().getSkinPartsPoint().extensions().get()) { 
    151 // 
    152 //                                      if (e.getObject().skinName().get().equals(name().get())) { 
    153 //                                              res = res.add(e.getObject()); 
    154 //                                      } 
    155 //                              } 
    156                                  
    157130                                return res; 
    158131                        } 
    159132                } 
     
    195168         *             
    196169         * @return The values, or empty list if can not be found. 
    197170         */ 
    198         public <T> List<T> getValues(String recordId, Class<T> valueClass) { 
     171        protected <T> List<T> getValues(String recordId, Class<T> valueClass) { 
    199172                List<T> res = new ArrayList<T>(); 
    200173 
    201174                List<ListEntry> entries = records().get().findAll(recordId); 
     
    230203         *            The property-id. 
    231204         * @param valueClass 
    232205         *            The expected value class. 
    233          *             
     206         *  
    234207         * @return the found value, or null if not found. 
    235208         */ 
    236         public <T> T getValue(String elementId, String propId, Class<T> valueClass) { 
     209        protected <T> T getValue(String elementId, String propId, 
     210                        Class<T> valueClass) { 
    237211                return getValue(makeRecordId(elementId, propId), valueClass); 
    238212        } 
    239213 
     
    251225         *             
    252226         * @return The values, or empty list if can not be found. 
    253227         */ 
    254         public <T> List<T> getValues(String elementId, String propId, 
     228         protected <T> List<T> getValues(String elementId, String propId, 
    255229                        Class<T> valueClass) { 
    256230                return getValues(makeRecordId(elementId, propId), valueClass); 
    257231        } 
     
    277251        public Prop<String> skinName() { 
    278252                class skinName extends AutoProperty<String> { 
    279253 
     254                        @SuppressWarnings("synthetic-access") 
    280255                        @Override 
    281256                        protected String compute() { 
    282257                                String res = name().get(); 
  • modules/org.sophie2.main.func.links/src/main/java/org/sophie2/main/func/links/LinksHud.java

     
    2828import org.sophie2.base.model.book.links.LinkTrigger; 
    2929import org.sophie2.base.skins.Skin; 
    3030import org.sophie2.base.skins.SkinElementId; 
    31 import org.sophie2.base.skins.SkinManager; 
    3231import org.sophie2.base.skins.SkinUtil; 
    3332import org.sophie2.base.visual.BaseSwingVisualElement; 
    3433import org.sophie2.base.visual.skins.ElementPartCreator; 
     
    168167                public static final LinkTrigger SELECT_TRIGGER_ITEM = new LinkTrigger() { 
    169168 
    170169                        public String getDescription() { 
    171                                 String elemId = SkinUtil.getElementId(AvailableTriggers.class); 
    172                                 return SkinManager.get().currentSkin().get().getValue(elemId, SELECT_TRIGGER_TITLE_PROP_ID, String.class); 
     170                                return SkinUtil.getSkinValue(AvailableTriggers.class, SELECT_TRIGGER_TITLE_PROP_ID, String.class); 
    173171                        } 
    174172 
    175173                        @Override 
     
    239237                        } 
    240238 
    241239                        public String getDescription() { 
    242                                 String elemId = SkinUtil.getElementId(AvailableActions.class); 
    243                                 return SkinManager.get().currentSkin().get().getValue(elemId, SELECT_ACTION_TITLE_PROP_ID, String.class); 
     240                                return SkinUtil.getSkinValue(AvailableActions.class, SELECT_ACTION_TITLE_PROP_ID, String.class); 
    244241                        } 
    245242 
    246243                        @Override 
  • modules/org.sophie2.base.skins/src/main/java/org/sophie2/base/skins/BaseSkinsModule.java

     
    33import java.util.List; 
    44 
    55import org.sophie2.base.config.ConfigKey; 
     6import org.sophie2.base.skins.providers.SimpleSkinPartsProvider; 
     7import org.sophie2.base.skins.providers.SkinPartsProvider; 
     8import org.sophie2.base.skins.value.loaders.SkinValueLoader; 
     9import org.sophie2.base.skins.value.loaders.TextValueLoader; 
    610import org.sophie2.core.modularity.SimpleSophieExtension; 
    711import org.sophie2.core.modularity.SophieExtension; 
    812import org.sophie2.core.modularity.SophieExtensionPoint; 
     
    8185        } 
    8286         
    8387 
    84         private SkinEntryPoint skinEntryPoint = null; 
     88        private SkinValueLoaderPoint skinEntryValuePoint = null; 
    8589 
    8690        /** 
    87          * Creates an extension point with interface {@link SkinEntry}. 
     91         * Creates an extension point with interface {@link SkinValueLoader}. 
    8892         *  
    8993         * @author tanya 
    9094         */ 
    91         public static class SkinEntryPoint extends SophieExtensionPoint<SkinEntry> { 
     95        public static class SkinValueLoaderPoint extends SophieExtensionPoint<SkinValueLoader> { 
    9296 
    9397                @Override 
    94                 public Class<SkinEntry> getExtensionClass() { 
    95                         return SkinEntry.class; 
     98                public Class<SkinValueLoader> getExtensionClass() { 
     99                        return SkinValueLoader.class; 
    96100                } 
    97101        } 
    98102         
    99103        /** 
    100          * Returns an instance of the {@link SkinEntryPoint} extension point.  
     104         * Returns an instance of the {@link SkinValueLoaderPoint} extension point.  
    101105         * @return An extension point. 
    102106         */ 
    103         public SkinEntryPoint getSkinEntryPoint() { 
    104                 if (this.skinEntryPoint == null) { 
    105                         this.skinEntryPoint = new SkinEntryPoint(); 
     107        public SkinValueLoaderPoint getSkinEntryPoint() { 
     108                if (this.skinEntryValuePoint == null) { 
     109                        this.skinEntryValuePoint = new SkinValueLoaderPoint(); 
    106110                } 
    107111                 
    108                 return this.skinEntryPoint; 
     112                return this.skinEntryValuePoint; 
    109113        } 
    110114         
    111115         
     
    133137        @Override 
    134138        protected void defineExtensions(List<SophieExtension<?>> res) { 
    135139                res.add(getSimpleSkinPartsProvider().asExtension()); 
    136                 res.add(new SimpleSophieExtension<SkinEntry>(SkinEntry.class, new TextSkinEntry())); 
    137                 res.add(new SimpleSophieExtension<ConfigKey>(ConfigKey.class, SkinManager.CURRENT_LANGUAGE_SKIN)); 
     140                res.add(new SimpleSophieExtension<SkinValueLoader>(SkinValueLoader.class, new TextValueLoader())); 
     141                res.add(new SimpleSophieExtension<ConfigKey>(ConfigKey.class, SkinManager.CURRENT_LANGUAGE_PACK)); 
    138142        } 
    139143} 
  • modules/org.sophie2.author/src/main/java/org/sophie2/author/AuthorModule.java

     
    1313import org.sophie2.base.model.resources.r4.ResourceRefR4; 
    1414import org.sophie2.base.model.resources.r4.access.ResourceAccess; 
    1515import org.sophie2.base.skins.BaseSkinPart; 
    16 import org.sophie2.base.skins.SimpleSkinPartsProvider; 
    1716import org.sophie2.base.skins.SkinUtil; 
     17import org.sophie2.base.skins.providers.SimpleSkinPartsProvider; 
    1818import org.sophie2.base.visual.BaseVisualModule; 
    1919import org.sophie2.core.logging.SophieLog; 
    2020import org.sophie2.core.modularity.SophieExtension; 
  • modules/org.sophie2.base.skins/src/main/java/org/sophie2/base/skins/TextSkinEntry.java

     
    1 package org.sophie2.base.skins; 
    2  
    3 import org.sophie2.core.modularity.SimpleSophieExtension; 
    4  
    5 /** 
    6  * Extension for the extension point defined with {@link SkinEntry} interface. 
    7  *  
    8  * @author tanya 
    9  */ 
    10 public class TextSkinEntry implements SkinEntry { 
    11  
    12         private static String KIND = "text"; 
    13          
    14         public Object createValue(String value) { 
    15                 return value; 
    16         } 
    17  
    18         public String getKind() { 
    19                 return KIND; 
    20         } 
    21          
    22         /** 
    23          * Creates an extension for this {@link SkinEntry}. 
    24          *  
    25          * @return  
    26          *                      The created extension. 
    27          */ 
    28         public SimpleSophieExtension<SkinEntry> asExtension() { 
    29                 return new SimpleSophieExtension<SkinEntry>(SkinEntry.class, this); 
    30         } 
    31 } 
  • modules/org.sophie2.base.skins/src/main/java/org/sophie2/base/skins/BaseSkinPart.java

     
    3737 
    3838        public RwProp<String> skinName() { 
    3939                return getBean().makeValueProp("skinName", String.class, 
    40                                 SkinsNames.DEFAULT_NAME); 
     40                                SkinManager.DEFAULT_NAME); 
    4141        } 
    4242 
    4343        /** 
  • modules/org.sophie2.extra.func.scripting/src/main/java/org/sophie2/extra/func/scripting/ScriptingModule.java

     
    88import org.sophie2.base.model.resources.r4.resources.ResourceR4; 
    99import org.sophie2.base.persistence.persister.Persister; 
    1010import org.sophie2.base.skins.BaseSkinPart; 
    11 import org.sophie2.base.skins.SimpleSkinPartsProvider; 
     11import org.sophie2.base.skins.SkinManager; 
    1212import org.sophie2.base.skins.SkinUtil; 
    13 import org.sophie2.base.skins.SkinsNames; 
     13import org.sophie2.base.skins.providers.SimpleSkinPartsProvider; 
    1414import org.sophie2.base.visual.AutoVisualProvider; 
    1515import org.sophie2.base.visual.SimpleVisualProvider; 
    1616import org.sophie2.core.modularity.SimpleSophieExtension; 
     
    115115                 
    116116                SimpleSkinPartsProvider provider = new SimpleSkinPartsProvider(); 
    117117                provider.parts().add(initSkin()); 
    118                 provider.parts().add(initLangSkin()); 
     118                provider.parts().add(initLanguagePack()); 
    119119                res.add(provider.asExtension()); 
    120120        } 
    121121         
     
    131131                return part; 
    132132        } 
    133133         
    134         private BaseSkinPart initLangSkin() { 
    135                 BaseSkinPart part = new BaseSkinPart(SkinsNames.LANGUAGE_PACK_NAME); 
     134        private BaseSkinPart initLanguagePack() { 
     135                BaseSkinPart part = new BaseSkinPart(SkinManager.LANGUAGE_PACK_NAME); 
    136136                 
    137137                part.add(SkinUtil.getElementId(ScriptResourceR4.class),  
    138138                                ResourcesPalette.SEPARATOR_TITLE_PROP_ID, "Scripts"); 
  • modules/org.sophie2.main.app.layout/src/main/java/org/sophie2/main/app/layout/MainAppLayoutModule.java

     
    44 
    55import org.sophie2.base.commons.util.position.ImmSize; 
    66import org.sophie2.base.skins.BaseSkinPart; 
    7 import org.sophie2.base.skins.SimpleSkinPartsProvider; 
     7import org.sophie2.base.skins.SkinManager; 
    88import org.sophie2.base.skins.SkinUtil; 
    9 import org.sophie2.base.skins.SkinsNames; 
     9import org.sophie2.base.skins.providers.SimpleSkinPartsProvider; 
    1010import org.sophie2.base.visual.AutoVisualProvider; 
    1111import org.sophie2.base.visual.BaseSwingVisualElement; 
    1212import org.sophie2.base.visual.BaseVisualElement; 
     
    8989                 
    9090                SimpleSkinPartsProvider provider = new SimpleSkinPartsProvider(); 
    9191                provider.parts().add(makeSkinPart()); 
    92                 provider.parts().add(makeLangSkinPart()); 
     92                provider.parts().add(makeLanguagePackPart()); 
    9393                res.add(provider.asExtension()); 
    9494                 
    9595        } 
     
    101101                return res; 
    102102        } 
    103103         
    104         private BaseSkinPart makeLangSkinPart() { 
    105                 BaseSkinPart res = new BaseSkinPart(SkinsNames.LANGUAGE_PACK_NAME); 
     104        private BaseSkinPart makeLanguagePackPart() { 
     105                BaseSkinPart res = new BaseSkinPart(SkinManager.LANGUAGE_PACK_NAME); 
    106106 
    107107                res.add(SkinUtil.getElementId(BooksTab.class), 
    108108                                BaseVisualElement.TITLE_PROP_ID, "Books"); 
  • modules/org.sophie2.base.skins/src/main/java/org/sophie2/base/skins/LanguageSkin.java

     
    1 //package org.sophie2.base.skins; 
    2 // 
    3 //public class LanguageSkin extends Skin { 
    4 // 
    5 //      public LanguageSkin(String name, LanguageSkin fallback) { 
    6 //              super(name, fallback); 
    7 //      } 
    8 //} 
  • modules/org.sophie2.base.skins/src/main/java/org/sophie2/base/skins/providers/SkinPartsProvider.java

     
    1 package org.sophie2.base.skins; 
     1package org.sophie2.base.skins.providers; 
    22 
     3import org.sophie2.base.skins.SkinPart; 
    34import org.sophie2.core.prolib.interfaces.ListProp; 
    45 
    56/** 
    6  * Extension point providing a list of base skin parts which are to be used in 
    7  * the current skin. 
     7 * Interface of an extension point that provides a list of base skin parts which 
     8 * are to be used in the current skin. 
    89 *  
    910 * @author tanya 
    1011 */ 
  • modules/org.sophie2.main.func.image/src/main/java/org/sophie2/main/func/image/ImageModule.java

     
    66import org.sophie2.base.model.book.resource.ImageResourceR4; 
    77import org.sophie2.base.model.resources.r4.resources.ResourceR4; 
    88import org.sophie2.base.skins.BaseSkinPart; 
    9 import org.sophie2.base.skins.SimpleSkinPartsProvider; 
     9import org.sophie2.base.skins.SkinManager; 
    1010import org.sophie2.base.skins.SkinUtil; 
    11 import org.sophie2.base.skins.SkinsNames; 
     11import org.sophie2.base.skins.providers.SimpleSkinPartsProvider; 
    1212import org.sophie2.base.visual.AutoVisualProvider; 
    1313import org.sophie2.base.visual.SimpleVisualProvider; 
    1414import org.sophie2.base.visual.VisualElement; 
     
    9191                 
    9292                SimpleSkinPartsProvider provider = new SimpleSkinPartsProvider(); 
    9393                provider.parts().add(initSkin()); 
    94                 provider.parts().add(initLangSkin()); 
     94                provider.parts().add(initLanguagePack()); 
    9595                res.add(provider.asExtension()); 
    9696        } 
    9797         
     
    107107                return part; 
    108108        } 
    109109         
    110         private BaseSkinPart initLangSkin() { 
    111                 BaseSkinPart part = new BaseSkinPart(SkinsNames.LANGUAGE_PACK_NAME); 
     110        private BaseSkinPart initLanguagePack() { 
     111                BaseSkinPart part = new BaseSkinPart(SkinManager.LANGUAGE_PACK_NAME); 
    112112                part.add(SkinUtil.getElementId(ImageResourceR4.class),  
    113113                                ResourcesPalette.SEPARATOR_TITLE_PROP_ID, "Images"); 
    114114                 
  • modules/org.sophie2.base.skins/src/main/java/org/sophie2/base/skins/providers/SimpleSkinPartsProvider.java

     
    1 package org.sophie2.base.skins; 
     1package org.sophie2.base.skins.providers; 
    22 
     3import org.sophie2.base.skins.SkinPart; 
    34import org.sophie2.core.modularity.SimpleSophieExtension; 
    45import org.sophie2.core.prolib.impl.BaseProObject; 
    56import org.sophie2.core.prolib.interfaces.RwListProp; 
  • modules/org.sophie2.main.func.templates/src/main/java/org/sophie2/main/func/templates/MainFuncTemplatesModule.java

     
    44 
    55import org.sophie2.base.dialogs.Dialog; 
    66import org.sophie2.base.skins.BaseSkinPart; 
    7 import org.sophie2.base.skins.SimpleSkinPartsProvider; 
     7import org.sophie2.base.skins.SkinManager; 
    88import org.sophie2.base.skins.SkinUtil; 
    9 import org.sophie2.base.skins.SkinsNames; 
     9import org.sophie2.base.skins.providers.SimpleSkinPartsProvider; 
    1010import org.sophie2.base.visual.AutoVisualProvider; 
    1111import org.sophie2.base.visual.BaseVisualElement; 
    1212import org.sophie2.base.visual.SimpleVisualProvider; 
     
    8383        } 
    8484         
    8585        private BaseSkinPart makeSkinPart() { 
    86                 BaseSkinPart res = new BaseSkinPart(SkinsNames.LANGUAGE_PACK_NAME); 
     86                BaseSkinPart res = new BaseSkinPart(SkinManager.LANGUAGE_PACK_NAME); 
    8787 
    8888                res.add(SkinUtil.getElementId(BookTemplatesPalette.class), 
    8989                                BaseVisualElement.TITLE_PROP_ID, "Book Templates"); 
  • modules/org.sophie2.base.visual/src/main/java/org/sophie2/base/visual/InternalSkinPart.java

     
    6161                                ElementPartCreator epc = new ElementPartCreator() { 
    6262                                        public void add(String propId, Object value) { 
    6363                                                if (value instanceof String) { 
    64                                                         BaseVisualModule.get().getInternalLangSkinPart().add(elementId, propId, value); 
     64                                                        BaseVisualModule.get().getInternalLanguagePackPart().add(elementId, propId, value); 
    6565                                                } else { 
    6666                                                        BaseVisualModule.get().getInternalSkinPart().add(elementId, propId, value); 
    6767                                                } 
  • modules/org.sophie2.main.func.config/src/main/java/org/sophie2/main/func/config/MainFuncConfigModule.java

     
    33import java.util.List; 
    44 
    55import org.sophie2.base.skins.BaseSkinPart; 
    6 import org.sophie2.base.skins.SimpleSkinPartsProvider; 
     6import org.sophie2.base.skins.SkinManager; 
    77import org.sophie2.base.skins.SkinUtil; 
    8 import org.sophie2.base.skins.SkinsNames; 
     8import org.sophie2.base.skins.providers.SimpleSkinPartsProvider; 
    99import org.sophie2.base.visual.BaseVisualElement; 
    1010import org.sophie2.base.visual.SimpleVisualProvider; 
    1111import org.sophie2.core.modularity.SophieExtension; 
     
    6363        } 
    6464 
    6565        private BaseSkinPart makeSkinPart() { 
    66                 BaseSkinPart res = new BaseSkinPart(SkinsNames.LANGUAGE_PACK_NAME); 
     66                BaseSkinPart res = new BaseSkinPart(SkinManager.LANGUAGE_PACK_NAME); 
    6767                res.add(SkinUtil.getElementId(ConfigTab.class), BaseVisualElement.TITLE_PROP_ID, "Config"); 
    6868                res.add(SkinUtil.getElementId(ConfigTab.class), BaseVisualElement.TOOL_TIP_PROP_ID, "Instruments for application configuration."); 
    6969 
  • modules/org.sophie2.base.skins/src/main/java/org/sophie2/base/skins/SkinManager.java

     
    1515 
    1616import org.sophie2.base.config.ConfigKey; 
    1717import org.sophie2.base.config.ConfigurationManager; 
     18import org.sophie2.base.skins.providers.SimpleSkinPartsProvider; 
     19import org.sophie2.base.skins.value.loaders.SkinValueLoader; 
    1820import org.sophie2.core.logging.SophieLog; 
    1921import org.sophie2.core.modularity.FileEntryManager; 
    2022import org.sophie2.core.modularity.SophieExtension; 
     
    4951         */ 
    5052        public static final String LOOK_AND_FEEL_SKIN_ID = "javax.swing.LookAndFeel"; 
    5153         
     54        private static final int PARTS_NUMBER = 3;  
     55         
    5256        /** 
    5357         * Map with all the skins created. 
    5458         */ 
    55         private static Map<String, Skin> skinCache = new HashMap<String, Skin>(); 
     59        private static Map<String, Skin> skinCache = new HashMap<String, Skin>() { 
     60                 
     61                private static final long serialVersionUID = -5778280692309048514L; 
     62 
     63                @Override 
     64                public Skin put(String key, Skin value) { 
     65                        return super.put(key.toLowerCase(), value); 
     66                } 
     67                 
     68                @Override 
     69                public Skin get(Object key) { 
     70                        return super.get(((String)key).toLowerCase()); 
     71                } 
     72        }; 
    5673         
    5774        /** 
    5875         * Config key for current language skin. 
    5976         */ 
    60         public static final ConfigKey<String> CURRENT_LANGUAGE_SKIN = ConfigKey.makeKey( 
    61                         String.class, "currentLanguageSkin", "skins.config", SkinsNames.LANGUAGE_PACK_NAME); 
     77        public static final ConfigKey<String> CURRENT_LANGUAGE_PACK = ConfigKey.makeKey( 
     78                        String.class, "currentLanguagePack", "skins.config", SkinManager.LANGUAGE_PACK_NAME); 
    6279 
    6380         
    64         private Skin defaultLanguageSkin = null;  
     81        private Skin defaultLanguagePack = null; 
     82        private Skin defaultPack = null; 
     83 
     84        /** 
     85         * The name of the default skin. 
     86         */ 
     87        public final static String DEFAULT_NAME = "default:en"; 
     88 
     89        /** 
     90         * The name of the default language skin. 
     91         */ 
     92        public final static String LANGUAGE_PACK_NAME = "language:default";  
    6593         
    6694        /** 
    6795         * Singleton method to return an instance of the default language skin. 
     
    6997         * @return  
    7098         *                      An instance of the default language skin. 
    7199         */ 
    72         public Skin getDefaultLanguageSkin() { 
    73                 if (this.defaultLanguageSkin == null) { 
    74                         this.defaultLanguageSkin = new Skin(SkinsNames.LANGUAGE_PACK_NAME, null); 
     100        public Skin getDefaultLanguagePack() { 
     101                if (this.defaultLanguagePack == null) { 
     102                        this.defaultLanguagePack = new Skin(SkinManager.LANGUAGE_PACK_NAME, getDefaultPack()); 
    75103                } 
    76104                 
    77                 return this.defaultLanguageSkin; 
     105                return this.defaultLanguagePack; 
     106        } 
     107         
     108        /** 
     109         * Singleton method to return an instance of the default skin. 
     110         *  
     111         * @return  
     112         *                      An instance of the default skin. 
     113         */ 
     114        public Skin getDefaultPack() { 
     115                if (this.defaultPack == null) { 
     116                        this.defaultPack = new Skin(SkinManager.DEFAULT_NAME, null); 
     117                } 
     118                 
     119                return this.defaultPack; 
    78120        } 
    79121         
    80122        /** 
     
    95137                                //TODO 
    96138                        } 
    97139 
     140                        @SuppressWarnings("synthetic-access") 
    98141                        @Override 
    99142                        protected void setup(Void res) { 
    100143 
    101                                 String currentLanguage = ConfigurationManager.get().getValue(CURRENT_LANGUAGE_SKIN); 
     144                                String currentLanguage = ConfigurationManager.get().getValue(CURRENT_LANGUAGE_PACK); 
    102145                                 
    103146                                SophieLog.info("Loading skin " + currentLanguage); 
    104147 
    105148                                SimpleSkinPartsProvider provider = BaseSkinsModule.get() 
    106149                                                .getSimpleSkinPartsProvider(); 
    107                                 Skin skin = createSkin(currentLanguage, provider.parts().get()); 
     150                                Skin skin = createSkin(currentLanguage, provider.parts().get(), SkinManager.LANGUAGE_PACK_NAME); 
    108151                                currentLanguagePack().set(skin); 
    109152                        } 
    110153                } 
     
    121164         * @return 
    122165         *                      The new skin created. 
    123166         */ 
    124         public static Skin createSkin(String skinName, List<SkinPart> parts) { 
    125                  
     167        private static Skin createSkin(String skinName, List<SkinPart> parts, String packName) { 
     168 
    126169                if (SkinManager.skinCache.containsKey(skinName)) { 
    127                         SophieLog.info("Skin loaded from cache"); 
     170                        SophieLog.trace("Skin loaded from cache " + skinName); 
    128171                        return SkinManager.skinCache.get(skinName); 
    129172                } 
    130173 
    131174                URL skinDef = FileEntryManager.get().getReadableFileEntry( 
    132175                                "skins/" + skinName); 
    133                 SophieLog.info(skinDef); 
     176                SophieLog.trace(skinDef); 
    134177 
    135178                if (skinDef == null) { 
    136                         return new Skin(SkinsNames.LANGUAGE_PACK_NAME, null); 
     179                        return SkinManager.skinCache.get(packName); 
    137180                } 
     181 
     182                loadSkinParts(skinName, parts); 
     183                 
     184                String fallbackName = getFallbackSkinName(skinDef); 
     185                Skin fallbackSkin = createSkin(fallbackName, parts, packName); 
     186                 
     187                Skin skin = new Skin(skinName, fallbackSkin); 
     188                SkinManager.skinCache.put(skinName, skin); 
     189                 
     190                return skin; 
     191        } 
     192         
     193        private static String getFallbackSkinName(URL skinDef) { 
    138194                 
    139195                Properties p = new Properties(); 
    140196                try { 
     
    143199                        throw new RuntimeException(e); 
    144200                } 
    145201 
    146                 loadBaseSkinParts(skinName, parts); 
    147  
    148202                String fallback = p.getProperty(FALLBACK_PROP_ID); 
    149                  
    150                 if (NONE_SKIN_VALUE.compareToIgnoreCase(fallback) == 0) { 
    151                         Skin skin = new Skin(skinName, new Skin(SkinsNames.LANGUAGE_PACK_NAME, null)); 
    152                         SkinManager.skinCache.put(skinName, skin); 
    153                         return skin; 
    154                 } 
    155                  
    156                 Skin fallbackSkin = createSkin(fallback, parts); 
    157                 Skin skin = new Skin(skinName, fallbackSkin); 
    158  
    159  
    160                 SkinManager.skinCache.put(skinName, skin); 
    161                 return skin; 
     203                return fallback; 
    162204        } 
    163205         
    164         private static void loadBaseSkinParts(String skinName, List<SkinPart> parts) { 
     206        private static void loadSkinParts(String skinName, List<SkinPart> parts) { 
    165207                int index = skinName.lastIndexOf("."); 
    166208            String begin = skinName.substring(0, index); 
    167209            String end = skinName.substring(index + 1); 
    168             String languageSkinDir = begin + "_" + end;  
     210            String languagePackDir = begin + "_" + end;  
    169211                 
    170                 List<String> partEntries = FileEntryManager.get().listFileEntries("skins/" + languageSkinDir); 
    171                 SophieLog.info("Loading parts"); 
     212                List<String> partEntries = FileEntryManager.get().listFileEntries("skins/" + languagePackDir); 
    172213                for (String part : partEntries) { 
    173                         SophieLog.info("Loading part " + part); 
     214                         
     215                        SophieLog.trace("Loading part " + part); 
    174216                         
    175217                        int relativeIndex = part.lastIndexOf("skins"); 
    176218                        String relativePath = part.substring(relativeIndex); 
    177                         SophieLog.info(relativePath); 
     219 
    178220                        URL partFile = FileEntryManager.get().getReadableFileEntry(relativePath); 
    179221                         
    180222                        BaseSkinPart skinPart = new BaseSkinPart(skinName); 
    181                         getContents(skinName, partFile, skinPart); 
     223                        loadPart(skinName, partFile, skinPart); 
    182224                        parts.add(skinPart); 
    183225                } 
    184226        } 
    185227 
    186         private static void getContents(String skinName, URL partFile, 
     228        private static void loadPart(String skinName, URL partFile, 
    187229                        BaseSkinPart skinPart) { 
    188                 SophieLog.info("part file "+ partFile); 
     230                 
     231                BufferedReader input = null; 
     232 
    189233                try { 
    190                         BufferedReader input = new BufferedReader( 
     234                        input = new BufferedReader( 
    191235                                        new InputStreamReader(partFile.openStream(), "UTF-8")); 
    192                         try { 
    193                                 String line = null; 
    194                                 while ((line = input.readLine()) != null) { 
    195                                         if (!line.equals("") && !line.startsWith("#")) { 
    196                                                 initRecord(skinName, skinPart, line); 
    197                                         } 
     236                         
     237                        String line = null; 
     238                        while ((line = input.readLine()) != null) { 
     239                                String trimmed = line.trim(); 
     240                                if (!trimmed.equals("") && !trimmed.startsWith("#")) { 
     241                                        initRecord(skinName, skinPart, line); 
    198242                                } 
    199                         } finally { 
    200                                 input.close(); 
    201243                        } 
     244 
    202245                } catch (IOException ex) { 
    203246                        throw new RuntimeException(ex); 
     247                } finally { 
     248                        if (input != null) { 
     249                                try { 
     250                                        input.close(); 
     251                                } catch (IOException e) { 
     252                                        throw new RuntimeException(e); 
     253                                } 
     254                        } 
    204255                } 
    205256        } 
    206          
    207          
     257                 
    208258        private static void initRecord(String skinName, SkinPart part, String toPart) { 
    209259                 
    210                 String[] idParts = toPart.trim().split(" : "); 
    211                 Object value = createValue(idParts[1], idParts[2], skinName); 
     260                String[] idParts = toPart.trim().split(" : ", PARTS_NUMBER); 
     261                 
     262                if (idParts.length == PARTS_NUMBER) { 
     263                        Object value = createValue(idParts[1], idParts[2], skinName); 
    212264 
    213                 if (value != null) { 
    214                         part.records().get().add( 
    215                                 new ListEntry(idParts[0], new SkinRecord(idParts[0], value))); 
     265                        if (value != null) { 
     266                                part.records().get().add( 
     267                                                new ListEntry(idParts[0], new SkinRecord(idParts[0], 
     268                                                                value))); 
     269                        } 
     270                } else { 
     271                        SophieLog.error("The line is not valid!!!"); 
    216272                } 
    217273        } 
    218274         
    219         private static final Object createValue(String type, String value, String skinName) { 
    220                  
    221                 assert type != null; 
    222                 assert type != ""; 
    223                  
    224                 ProList<SophieExtension<SkinEntry>> extensions = BaseSkinsModule.get().getSkinEntryPoint().extensions().get(); 
    225                  
    226                 for (SophieExtension<SkinEntry> entry : extensions) { 
    227                         if (type.equals(entry.getObject().getKind())) { 
     275        private static final Object createValue(String kind, String value, 
     276                        String skinName) { 
     277 
     278                assert kind != null && kind != "" : "The kind of the value that is to be created should " + 
     279                                "not be null and should not be an empty string"; 
     280 
     281                ProList<SophieExtension<SkinValueLoader>> extensions = BaseSkinsModule 
     282                                .get().getSkinEntryPoint().extensions().get(); 
     283 
     284                for (SophieExtension<SkinValueLoader> entry : extensions) { 
     285                        if (kind.equals(entry.getObject().getKind())) { 
    228286                                Object res = entry.getObject().createValue(value); 
    229287                                return res; 
    230288                        } 
    231289                } 
    232                  
     290 
    233291                return null; 
    234         } 
    235          
     292        }        
    236293         
    237294        /** 
    238295         * The current Skin that is in use. 
     
    307364 
    308365        // XXX: singleton 
    309366        private SkinManager() { 
    310                 Skin currentSkin = new Skin(SkinsNames.DEFAULT_NAME, null); 
     367                Skin currentSkin = getDefaultPack(); 
    311368                currentSkin().set(currentSkin); 
    312                 skinCache.put(SkinsNames.DEFAULT_NAME, currentSkin); 
     369                skinCache.put(SkinManager.DEFAULT_NAME, currentSkin); 
    313370                 
    314                 Skin currentLanguageSkin = new Skin(SkinsNames.LANGUAGE_PACK_NAME, new Skin(SkinsNames.DEFAULT_NAME, null)); 
    315                 currentLanguagePack().set(currentLanguageSkin); 
    316                 skinCache.put(SkinsNames.LANGUAGE_PACK_NAME, currentLanguageSkin); 
     371                Skin currentLanguagePack = getDefaultLanguagePack(); 
     372                currentLanguagePack().set(currentLanguagePack); 
     373                skinCache.put(SkinManager.LANGUAGE_PACK_NAME, currentLanguagePack); 
     374                 
     375                skinCache.put(NONE_SKIN_VALUE, null); 
    317376        } 
    318377 
    319378        private static SkinManager instance = null; 
  • modules/org.sophie2.dev/src/test/java/org/sophie2/dev/author/ResourcePreviewSystemTest.java

     
    1313import org.sophie2.base.model.resources.r4.resources.ResourceH; 
    1414import org.sophie2.base.skins.BaseSkinPart; 
    1515import org.sophie2.base.skins.Message; 
    16 import org.sophie2.base.skins.SimpleSkinPartsProvider; 
     16import org.sophie2.base.skins.SkinManager; 
    1717import org.sophie2.base.skins.SkinUtil; 
    18 import org.sophie2.base.skins.SkinsNames; 
     18import org.sophie2.base.skins.providers.SimpleSkinPartsProvider; 
    1919import org.sophie2.base.visual.AutoVisualProvider; 
    2020import org.sophie2.base.visual.BaseSwingVisualElement; 
    2121import org.sophie2.base.visual.BaseVisualElement; 
     
    9494                                        ResourcePreviewProvider.class, 
    9595                                        new DummyResourcePreviewProvider())); 
    9696                         
    97                         BaseSkinPart part = new BaseSkinPart(SkinsNames.LANGUAGE_PACK_NAME); 
     97                        BaseSkinPart part = new BaseSkinPart(SkinManager.LANGUAGE_PACK_NAME); 
    9898                        part.add(SkinUtil.getElementId(VideoFilteringButton.class), BaseVisualElement.TITLE_PROP_ID, "TestingResource"); 
    9999                         
    100100                        SimpleSkinPartsProvider provider = new SimpleSkinPartsProvider(); 
  • modules/org.sophie2.main.skin.alternative/src/main/java/org/sophie2/main/skin/alternative/SkinsMenuLogic.java

     
    33import org.sophie2.base.menus.MenuItem; 
    44import org.sophie2.base.skins.Skin; 
    55import org.sophie2.base.skins.SkinManager; 
    6 import org.sophie2.base.skins.SkinsNames; 
    76import org.sophie2.core.modularity.SortKey; 
    87import org.sophie2.core.mvc.EventFilterBuilder; 
    98import org.sophie2.core.mvc.OperationDef; 
     
    3231 
    3332                public boolean handle(EventR3 event) { 
    3433                        SkinManager.get().currentSkin().set( 
    35                                         new Skin(SkinsNames.DEFAULT_NAME, null)); 
     34                                        new Skin(SkinManager.DEFAULT_NAME, null)); 
    3635 
    3736                        return true; 
    3837                } 
  • modules/org.sophie2.main.func.timelines/src/main/java/org/sophie2/main/func/timelines/MainFuncTimelinesModule.java

     
    66import org.sophie2.base.model.book.links.LinkActionProvider; 
    77import org.sophie2.base.persistence.persister.Persister; 
    88import org.sophie2.base.skins.BaseSkinPart; 
    9 import org.sophie2.base.skins.SimpleSkinPartsProvider; 
    109import org.sophie2.base.skins.SkinUtil; 
     10import org.sophie2.base.skins.providers.SimpleSkinPartsProvider; 
    1111import org.sophie2.base.visual.AutoVisualProvider; 
    1212import org.sophie2.base.visual.BaseSwingVisualElement; 
    1313import org.sophie2.base.visual.SimpleVisualProvider; 
  • modules/org.sophie2.base.skins/src/main/java/org/sophie2/base/skins/value/loaders/TextValueLoader.java

     
    1 package org.sophie2.base.skins; 
     1package org.sophie2.base.skins.value.loaders; 
    22 
    33import org.sophie2.core.modularity.SimpleSophieExtension; 
    44 
    55/** 
    6  * Extension for the extension point defined with {@link SkinEntry} interface. 
     6 * Provides an extension for the extension point defined with {@link SkinValueLoader} interface. 
     7 * It is responsible for values which kind is <i>text</i> such as titles or tool-tips. 
    78 *  
    89 * @author tanya 
    910 */ 
    10 public class TextSkinEntry implements SkinEntry { 
     11public class TextValueLoader implements SkinValueLoader { 
    1112 
    1213        private static String KIND = "text"; 
    1314         
     
    2021        } 
    2122         
    2223        /** 
    23          * Creates an extension for this {@link SkinEntry}. 
     24         * Creates an extension for this {@link SkinValueLoader}. 
    2425         *  
    2526         * @return  
    2627         *                      The created extension. 
    2728         */ 
    28         public SimpleSophieExtension<SkinEntry> asExtension() { 
    29                 return new SimpleSophieExtension<SkinEntry>(SkinEntry.class, this); 
     29        public SimpleSophieExtension<SkinValueLoader> asExtension() { 
     30                return new SimpleSophieExtension<SkinValueLoader>(SkinValueLoader.class, this); 
    3031        } 
    3132} 
  • modules/org.sophie2.base.skins/src/main/java/org/sophie2/base/skins/value/loaders/SkinValueLoader.java

     
    1 package org.sophie2.base.skins; 
     1package org.sophie2.base.skins.value.loaders; 
    22 
    33/** 
    4  * An extension point for entries for the skin. (text, icon,..) 
     4 * Interface of an extension point for records for a skin. 
     5 * When the skin is to be loaded from a file, the values of the records are Strings that should be parsed. 
     6 * Depending on that whether the value of the record should be string (for titles or tool-tips for example), 
     7 * or should be an icon, it should be parsed in different way. The extension point helps to define whether 
     8 * the value should be parsed to string or icon and finds the appropriate extension that will parse the value. 
    59 *  
    610 * @author tanya 
    711 */ 
    8 public interface SkinEntry { 
     12public interface SkinValueLoader { 
    913 
    1014        /** 
    11          * Returns the kind of the entry. 
     15         * Returns the kind of the value of the record. The kind can be text or icon for example. 
    1216         *  
    1317         * @return  
    14          *                      The kind of the entry. 
     18         *                      The kind of the value of the record. 
    1519         */ 
    1620        public String getKind(); 
    1721         
    1822        /** 
    19          * Creates an object and returns is. 
     23         * Creates an object and returns is. Parse the string to the desired object. 
    2024         *  
    2125         * @param value 
    22          *                              The value needed for an object to be created. 
     26         *                              The value needed for an object to be created. The string that should be parsed. 
    2327         * @return 
    24          *                      The object created. 
     28         *                      The object created after parsing of the string. 
    2529         */ 
    2630        public Object createValue(String value); 
    2731} 
  • modules/org.sophie2.main.skin.alternative/src/main/java/org/sophie2/main/skin/alternative/AlternativeSkinsModule.java

     
    33import java.util.List; 
    44 
    55import org.sophie2.base.skins.BaseSkinPart; 
    6 import org.sophie2.base.skins.SimpleSkinPartsProvider; 
    76import org.sophie2.base.skins.Skin; 
    87import org.sophie2.base.skins.SkinManager; 
    98import org.sophie2.base.skins.SkinPart; 
     9import org.sophie2.base.skins.providers.SimpleSkinPartsProvider; 
    1010import org.sophie2.core.modularity.SophieExtension; 
    1111import org.sophie2.core.modularity.SophieExtensionPoint; 
    1212import org.sophie2.core.modularity.SophieModule; 
  • modules/org.sophie2.base.skins/src/test/java/org/sophie2/base/skins/SkinsTest.java

     
    22 
    33import java.util.List; 
    44 
     5import org.sophie2.base.skins.providers.SimpleSkinPartsProvider; 
    56import org.sophie2.core.modularity.FakeModuleRegistry; 
    67import org.sophie2.core.modularity.SophieExtension; 
    78import org.sophie2.core.modularity.SophieExtensionPoint; 
     
    7576                private void makeSkinParts(List<SophieExtension<?>> list) { 
    7677                        // the default skin will have two SkinParts. 
    7778                        // create skin parts and add skin records to them. 
    78                         BaseSkinPart part1 = new BaseSkinPart(SkinsNames.LANGUAGE_PACK_NAME); 
    79                         BaseSkinPart part2 = new BaseSkinPart(SkinsNames.LANGUAGE_PACK_NAME); 
     79                        BaseSkinPart part1 = new BaseSkinPart(SkinManager.LANGUAGE_PACK_NAME); 
     80                        BaseSkinPart part2 = new BaseSkinPart(SkinManager.LANGUAGE_PACK_NAME); 
    8081                        // the skinpart for the third skin. 
    8182                        BaseSkinPart part4 = new BaseSkinPart(COOL_SKIN_NAME); 
    8283 
     
    172173                FakeModuleRegistry.start(BaseSkinsModule.class, DemoModule.class); 
    173174 
    174175                // the default skin. 
    175                 this.defaultSkin = new Skin(SkinsNames.DEFAULT_NAME, null); 
     176                this.defaultSkin = new Skin(SkinManager.DEFAULT_NAME, null); 
    176177 
    177178                // the third skin. 
    178179                this.coolSkin3 = new Skin(COOL_SKIN_NAME, this.defaultSkin); 
  • modules/org.sophie2.base.skins/src/main/java/org/sophie2/base/skins/SkinEntry.java

     
    1 package org.sophie2.base.skins; 
    2  
    3 /** 
    4  * An extension point for entries for the skin. (text, icon,..) 
    5  *  
    6  * @author tanya 
    7  */ 
    8 public interface SkinEntry { 
    9  
    10         /** 
    11          * Returns the kind of the entry. 
    12          *  
    13          * @return  
    14          *                      The kind of the entry. 
    15          */ 
    16         public String getKind(); 
    17          
    18         /** 
    19          * Creates an object and returns is. 
    20          *  
    21          * @param value 
    22          *                              The value needed for an object to be created. 
    23          * @return 
    24          *                      The object created. 
    25          */ 
    26         public Object createValue(String value); 
    27 } 
  • modules/org.sophie2.main.app.menus/src/main/java/org/sophie2/main/app/menus/MainAppMenusModule.java

     
    66import org.sophie2.base.menus.MenuItem; 
    77import org.sophie2.base.menus.MenuMember; 
    88import org.sophie2.base.skins.BaseSkinPart; 
    9 import org.sophie2.base.skins.SimpleSkinPartsProvider; 
     9import org.sophie2.base.skins.SkinManager; 
    1010import org.sophie2.base.skins.SkinUtil; 
    11 import org.sophie2.base.skins.SkinsNames; 
     11import org.sophie2.base.skins.providers.SimpleSkinPartsProvider; 
    1212import org.sophie2.base.visual.AutoVisualProvider; 
    1313import org.sophie2.base.visual.BaseVisualElement; 
    1414import org.sophie2.base.visual.NullVisualProvider; 
     
    181181 
    182182                SimpleSkinPartsProvider provider = new SimpleSkinPartsProvider(); 
    183183                provider.parts().add(makeSkinPart()); 
    184                 provider.parts().add(makeLangSkinPart()); 
     184                provider.parts().add(makeLanguagePackPart()); 
    185185                res.add(provider.asExtension()); 
    186186        } 
    187187 
     
    200200                 
    201201        } 
    202202         
    203         private BaseSkinPart makeLangSkinPart() { 
    204                 BaseSkinPart res = new BaseSkinPart(SkinsNames.LANGUAGE_PACK_NAME); 
     203        private BaseSkinPart makeLanguagePackPart() { 
     204                BaseSkinPart res = new BaseSkinPart(SkinManager.LANGUAGE_PACK_NAME); 
    205205 
    206206                res.add(SkinUtil.getElementId(MinimizeAllItem.class), BaseVisualElement.TITLE_PROP_ID, 
    207207                                "Minimize All"); 
  • modules/org.sophie2.base.visual/src/main/java/org/sophie2/base/visual/BaseVisualModule.java

     
    33import java.util.Comparator; 
    44import java.util.List; 
    55 
    6 import org.sophie2.base.skins.SimpleSkinPartsProvider; 
    7 import org.sophie2.base.skins.SkinsNames; 
     6import org.sophie2.base.skins.SkinManager; 
     7import org.sophie2.base.skins.providers.SimpleSkinPartsProvider; 
    88import org.sophie2.base.visual.interaction.InteractionLogic; 
    99import org.sophie2.core.modularity.SophieExtension; 
    1010import org.sophie2.core.modularity.SophieExtensionPoint; 
     
    8080 
    8181        private VisualPoint visualPoint; 
    8282        private InternalSkinPart internalSkinPart; 
    83         private InternalSkinPart internalLangSkinPart; 
     83        private InternalSkinPart internalLanguagePackPart; 
    8484 
    8585        /** 
    8686         * Gets the extension point for visual element provides. 
     
    118118         *  
    119119         * @return The internal skin part. 
    120120         */ 
    121         protected InternalSkinPart getInternalLangSkinPart() { 
    122                 if (this.internalLangSkinPart == null) { 
    123                         this.internalLangSkinPart = new InternalSkinPart(); 
    124                         this.internalLangSkinPart.skinName().set(SkinsNames.LANGUAGE_PACK_NAME); 
     121        protected InternalSkinPart getInternalLanguagePackPart() { 
     122                if (this.internalLanguagePackPart == null) { 
     123                        this.internalLanguagePackPart = new InternalSkinPart(); 
     124                        this.internalLanguagePackPart.skinName().set(SkinManager.LANGUAGE_PACK_NAME); 
    125125                } 
    126                 return this.internalLangSkinPart; 
     126                return this.internalLanguagePackPart; 
    127127        } 
    128128         
    129129 
     
    139139                        this.simpleSkinPartsProvider = new SimpleSkinPartsProvider(); 
    140140                 
    141141                        this.simpleSkinPartsProvider.parts().add(getInternalSkinPart()); 
    142                         this.simpleSkinPartsProvider.parts().add(getInternalLangSkinPart()); 
     142                        this.simpleSkinPartsProvider.parts().add(getInternalLanguagePackPart()); 
    143143                } 
    144144                 
    145145                return this.simpleSkinPartsProvider; 
  • modules/org.sophie2.main.func.resources/src/main/java/org/sophie2/main/func/resources/MainFuncResourcesModule.java

     
    1717import org.sophie2.base.persistence.persister.Persister; 
    1818import org.sophie2.base.persistence.persister.impl.EnumPersister; 
    1919import org.sophie2.base.skins.BaseSkinPart; 
    20 import org.sophie2.base.skins.SimpleSkinPartsProvider; 
     20import org.sophie2.base.skins.SkinManager; 
    2121import org.sophie2.base.skins.SkinUtil; 
    22 import org.sophie2.base.skins.SkinsNames; 
     22import org.sophie2.base.skins.providers.SimpleSkinPartsProvider; 
    2323import org.sophie2.base.visual.AutoVisualProvider; 
    2424import org.sophie2.base.visual.BaseSwingVisualElement; 
    2525import org.sophie2.base.visual.BaseVisualElement; 
     
    286286                res.add(SimpleSophieExtension.create(ResourcesPaletteSeparator.class, 
    287287                                new BaseResourcesPaletteSeparator(ImageResourceR4.KIND, "ggg-image-separator"))); 
    288288                 
    289                 BaseSkinPart partChooser = new BaseSkinPart(SkinsNames.LANGUAGE_PACK_NAME); 
     289                BaseSkinPart partChooser = new BaseSkinPart(SkinManager.LANGUAGE_PACK_NAME); 
    290290                String choserID = SkinUtil.getElementId(BinDataChooser.class); 
    291291                partChooser.add(choserID, BinDataChooser.COPY_TITLE_PROP_ID, "Copy to '_files'"); 
    292292                partChooser.add(choserID, BinDataChooser.COPY_TOOL_TIP_PROP_ID, "Copy the resource to the '_files' folder of the book"); 
     
    301301                SimpleSkinPartsProvider provider = new SimpleSkinPartsProvider(); 
    302302                provider.parts().add(partChooser); 
    303303                provider.parts().add(initSkin()); 
    304                 provider.parts().add(initLangSkin()); 
     304                provider.parts().add(initLanguagePack()); 
    305305                res.add(provider.asExtension()); 
    306306                 
    307307        } 
     
    348348                return part; 
    349349        } 
    350350         
    351         private BaseSkinPart initLangSkin() { 
    352                 BaseSkinPart part = new BaseSkinPart(SkinsNames.LANGUAGE_PACK_NAME); 
     351        private BaseSkinPart initLanguagePack() { 
     352                BaseSkinPart part = new BaseSkinPart(SkinManager.LANGUAGE_PACK_NAME); 
    353353                part.add(SkinUtil.getElementId(AdvancedCheckBox.class), BaseVisualElement.TITLE_PROP_ID, "Advanced"); 
    354354                part.add(SkinUtil.getElementId(AdvancedCheckBox.class), BaseVisualElement.TOOL_TIP_PROP_ID, "Show all resources"); 
    355355                 
  • modules/org.sophie2.extra.comment/src/main/java/org/sophie2/extra/comment/CommentModule.java

     
    77import org.sophie2.base.model.resources.r4.resources.ResourceR4; 
    88import org.sophie2.base.persistence.persister.Persister; 
    99import org.sophie2.base.skins.BaseSkinPart; 
    10 import org.sophie2.base.skins.SimpleSkinPartsProvider; 
    1110import org.sophie2.base.skins.SkinUtil; 
     11import org.sophie2.base.skins.providers.SimpleSkinPartsProvider; 
    1212import org.sophie2.base.visual.AutoVisualProvider; 
    1313import org.sophie2.base.visual.SimpleVisualProvider; 
    1414import org.sophie2.core.modularity.SimpleSophieExtension; 
  • modules/org.sophie2.reader/src/main/java/org/sophie2/reader/ReaderModule.java

     
    1818import org.sophie2.base.model.resources.r4.LocationPrefix; 
    1919import org.sophie2.base.model.resources.r4.ResourceRefR4; 
    2020import org.sophie2.base.skins.BaseSkinPart; 
    21 import org.sophie2.base.skins.SimpleSkinPartsProvider; 
    2221import org.sophie2.base.skins.SkinUtil; 
     22import org.sophie2.base.skins.providers.SimpleSkinPartsProvider; 
    2323import org.sophie2.base.visual.BaseVisualModule; 
    2424import org.sophie2.core.logging.SophieLog; 
    2525import org.sophie2.core.modularity.SophieExtension; 
  • modules/org.sophie2.extra.func.embedded/src/main/java/org/sophie2/extra/func/embedded/EmbeddedBooksModule.java

     
    55import org.sophie2.base.model.resources.r4.resources.ResourceR4; 
    66import org.sophie2.base.persistence.persister.Persister; 
    77import org.sophie2.base.skins.BaseSkinPart; 
    8 import org.sophie2.base.skins.SimpleSkinPartsProvider; 
     8import org.sophie2.base.skins.SkinManager; 
    99import org.sophie2.base.skins.SkinUtil; 
    10 import org.sophie2.base.skins.SkinsNames; 
     10import org.sophie2.base.skins.providers.SimpleSkinPartsProvider; 
    1111import org.sophie2.base.visual.AutoVisualProvider; 
    1212import org.sophie2.base.visual.BaseVisualElement; 
    1313import org.sophie2.base.visual.SimpleVisualProvider; 
     
    116116        } 
    117117 
    118118        private BaseSkinPart makeSkinPart() { 
    119                 BaseSkinPart res = new BaseSkinPart(SkinsNames.LANGUAGE_PACK_NAME); 
     119                BaseSkinPart res = new BaseSkinPart(SkinManager.LANGUAGE_PACK_NAME); 
    120120                res.add(SkinUtil.getElementId(EmbeddedBooksPalette.class), 
    121121                                BaseVisualElement.TITLE_PROP_ID, "Embedded Books"); 
    122122                res.add(SkinUtil.getElementId(EmbeddedBooksPalette.class),