GROUP_BASE_SKINS_R0: skin-patch-24.04.2009.2.txt

File skin-patch-24.04.2009.2.txt, 61.5 KB (added by nenko, 16 years ago)
Line 
1### Eclipse Workspace Patch 1.0
2#P sophie2-platform
3Index: modules/org.sophie2.base.commons/src/main/resources/distrib/icons/hackicons/alignFramesTop.png
4===================================================================
5Cannot display: file marked as a binary type.
6svn:mime-type = application/octet-stream
7Index: modules/org.sophie2.base.commons/src/main/resources/distrib/icons/hackicons/alignFramesLeft.png
8===================================================================
9Cannot display: file marked as a binary type.
10svn:mime-type = application/octet-stream
11Index: modules/org.sophie2.base.commons/src/main/resources/distrib/icons/hackicons/useTemplateOn.png
12===================================================================
13Cannot display: file marked as a binary type.
14svn:mime-type = application/octet-stream
15Index: modules/org.sophie2.base.commons/src/main/resources/distrib/icons/hackicons/approve.png
16===================================================================
17Cannot display: file marked as a binary type.
18svn:mime-type = application/octet-stream
19Index: modules/org.sophie2.base.skins/src/main/java/org/sophie2/base/skins/SkinManager.java
20===================================================================
21--- modules/org.sophie2.base.skins/src/main/java/org/sophie2/base/skins/SkinManager.java        (revision 2334)
22+++ modules/org.sophie2.base.skins/src/main/java/org/sophie2/base/skins/SkinManager.java        (working copy)
23@@ -4,11 +4,19 @@
24 import org.sophie2.core.prolib.interfaces.RwProp;
25 
26 /**
27+ * The Skin Manager. Used to decide which is the currently selected skin
28+ *
29+ * Use this class when you want to change the current skin for the application.
30+ * This can be done by setting the skin you want for currentSkin property
31+ *
32+ * Example :
33+ *     SkinManager().get().currentSkin().set(new SkinYouWant());
34+ *
35  * @author nenko, peko
36- *
37+ *
38  */
39-public class SkinManager extends BaseProObject{
40-       
41+public class SkinManager extends BaseProObject {
42+
43        /**
44         * The current Skin that is in use.
45         *
46@@ -17,49 +25,25 @@
47        public RwProp<Skin> currentSkin() {
48                return getBean().makeValueProp("currentSkin", Skin.class);
49        }
50-       
51-//     public Prop<Skin> defaultSkin() {
52-//             class defaultSkin extends AutoProperty<Skin> {
53-//                     
54-//                     @Override
55-//                     protected Skin compute() {
56-//                             Skin res = new Skin(SkinsNames.DEFAULT_NAME, null);
57-//                             return res;
58-//                     }
59-//             }
60-//             return getBean().makeProp(defaultSkin.class);
61-//     }
62-//     
63-//     public Prop<Skin> alternativeSkin() {
64-//             class alternativeSkin extends AutoProperty<Skin> {
65-//                     
66-//                     @Override
67-//                     protected Skin compute() {
68-//                             Skin res = new Skin(SkinsNames.ALTERNATIVE_NAME, defaultSkin().get());
69-//                             return res;
70-//                     }
71-//             }
72-//             return getBean().makeProp(alternativeSkin.class);
73-//     }
74-       
75-       //XXX: singleton
76-       private SkinManager () {
77-               //because it's singleton
78+
79+       // XXX: singleton
80+       private SkinManager() {
81+               // because it's singleton
82        }
83-       
84+
85        private static SkinManager instance = null;
86-       
87+
88        /**
89         * @return the one and only instance of the {@link SkinManager}.
90         */
91-       //XXX singleton
92+       // XXX singleton
93        public static SkinManager get() {
94                if (instance == null) {
95                        instance = new SkinManager();
96                        instance.currentSkin().set(new Skin(SkinsNames.DEFAULT_NAME, null));
97                }
98-               
99+
100                return instance;
101        }
102-       
103+
104 }
105Index: modules/org.sophie2.base.commons/src/main/resources/distrib/icons/hackicons/underlineOn.png
106===================================================================
107Cannot display: file marked as a binary type.
108svn:mime-type = application/octet-stream
109Index: modules/org.sophie2.base.commons/src/main/resources/distrib/icons/hackicons/multiSelectHaloOn.png
110===================================================================
111Cannot display: file marked as a binary type.
112svn:mime-type = application/octet-stream
113Index: modules/org.sophie2.base.commons/src/main/resources/distrib/icons/hackicons/alignFramesBottom.png
114===================================================================
115Cannot display: file marked as a binary type.
116svn:mime-type = application/octet-stream
117Index: modules/org.sophie2.base.commons/src/main/resources/distrib/icons/hackicons/pageHalo.png
118===================================================================
119Cannot display: file marked as a binary type.
120svn:mime-type = application/octet-stream
121Index: modules/org.sophie2.main.app.menus/src/main/java/org/sophie2/main/app/menus/skins/HackersSkinItem.java
122===================================================================
123--- modules/org.sophie2.main.app.menus/src/main/java/org/sophie2/main/app/menus/skins/HackersSkinItem.java      (revision 2334)
124+++ modules/org.sophie2.main.app.menus/src/main/java/org/sophie2/main/app/menus/skins/HackersSkinItem.java      (working copy)
125@@ -1,29 +0,0 @@
126-package org.sophie2.main.app.menus.skins;
127-
128-import org.sophie2.base.menus.MenuItem;
129-import org.sophie2.base.skins.Skin;
130-import org.sophie2.base.skins.SkinElementId;
131-import org.sophie2.base.skins.SkinManager;
132-import org.sophie2.base.skins.SkinsNames;
133-
134-/**
135- * A menu item to switch to the Hackers skin in Sophie2.
136- *
137- * @author peko, nenko
138- *
139- */
140-@SkinElementId("app.menus.skins.hackers-skin-item")
141-public class HackersSkinItem extends MenuItem {
142-
143-       @Override
144-       public void clicked() {
145-               SkinManager.get().currentSkin().set(
146-                               new Skin(SkinsNames.ALTERNATIVE_NAME, new Skin(SkinsNames.DEFAULT_NAME, null)));
147-       }
148-
149-       @Override
150-       protected boolean computeEnabled() {
151-               return true;
152-       }
153-
154-}
155Index: modules/org.sophie2.main.app.commons/src/main/java/org/sophie2/main/app/commons/MainAppModule.java
156===================================================================
157--- modules/org.sophie2.main.app.commons/src/main/java/org/sophie2/main/app/commons/MainAppModule.java  (revision 2334)
158+++ modules/org.sophie2.main.app.commons/src/main/java/org/sophie2/main/app/commons/MainAppModule.java  (working copy)
159@@ -28,7 +28,6 @@
160 import org.sophie2.main.app.commons.book.panels.ShowFramesCheckBoxPanel;
161 import org.sophie2.main.app.commons.book.panels.ZoomPercentagePanel;
162 import org.sophie2.main.app.commons.content.FrameContentViewProvider;
163-import org.sophie2.main.app.commons.content.HotTextContentViewProvider;
164 import org.sophie2.main.app.commons.dialogs.BookPropertiesDialog;
165 import org.sophie2.main.app.commons.dialogs.ColorDialog;
166 import org.sophie2.main.app.commons.dialogs.ConfirmDialog;
167@@ -36,7 +35,6 @@
168 import org.sophie2.main.app.commons.dialogs.FontChooserDialog;
169 import org.sophie2.main.app.commons.dialogs.MessageDialog;
170 import org.sophie2.main.app.commons.dialogs.StringDialog;
171-import org.sophie2.main.app.commons.logic.HotTextLogic;
172 import org.sophie2.main.app.commons.logic.PageElementLogic;
173 import org.sophie2.main.app.commons.logic.PageLogic;
174 import org.sophie2.main.app.commons.page.areas.AuthorPageWorkArea;
175@@ -213,13 +211,10 @@
176 //                             BookDocumentWindow.class, BookDocumentWindow.ROLE_AUTHOR_AREA,
177 //                             "xxx-legacy-page-work-area"));
178 
179-               res.add(new SimpleSophieExtension<FrameContentViewProvider>(
180-                               FrameContentViewProvider.class, new HotTextContentViewProvider()));
181                AutoVisualProvider.fillExtensions(res, AppTabBar.class);
182 
183                SimpleOperation.fillExtensions(res, PageElementLogic.class);
184                SimpleOperation.fillExtensions(res, PageLogic.ScenePageLogicR3.class);
185-               SimpleOperation.fillExtensions(res, HotTextLogic.class);
186               
187                SimpleOperation.fillExtensions(res, LinkProcessor.class);
188        }
189Index: modules/org.sophie2.base.commons/src/main/resources/distrib/icons/hackicons/sizeAndPosition.png
190===================================================================
191Cannot display: file marked as a binary type.
192svn:mime-type = application/octet-stream
193Index: modules/org.sophie2.base.commons/src/main/resources/distrib/icons/hackicons/rightAlignmentOn.png
194===================================================================
195Cannot display: file marked as a binary type.
196svn:mime-type = application/octet-stream
197Index: modules/org.sophie2.base.commons/src/main/resources/distrib/icons/hackicons/underline.png
198===================================================================
199Cannot display: file marked as a binary type.
200svn:mime-type = application/octet-stream
201Index: modules/org.sophie2.main.skin.alternative/src/main/java/org/sophie2/main/skin/alternative/AlternativeSkinItem.java
202===================================================================
203--- modules/org.sophie2.main.skin.alternative/src/main/java/org/sophie2/main/skin/alternative/AlternativeSkinItem.java  (revision 0)
204+++ modules/org.sophie2.main.skin.alternative/src/main/java/org/sophie2/main/skin/alternative/AlternativeSkinItem.java  (revision 0)
205@@ -0,0 +1,29 @@
206+package org.sophie2.main.skin.alternative;
207+
208+import org.sophie2.base.menus.MenuItem;
209+import org.sophie2.base.skins.Skin;
210+import org.sophie2.base.skins.SkinElementId;
211+import org.sophie2.base.skins.SkinManager;
212+import org.sophie2.base.skins.SkinsNames;
213+
214+/**
215+ * A menu item to switch to the Hackers skin in Sophie2.
216+ *
217+ * @author peko, nenko
218+ *
219+ */
220+@SkinElementId("app.menus.skins.hackers-skin-item")
221+public class AlternativeSkinItem extends MenuItem {
222+
223+       @Override
224+       public void clicked() {
225+               SkinManager.get().currentSkin().set(
226+                               new Skin(SkinsNames.ALTERNATIVE_NAME, new Skin(SkinsNames.DEFAULT_NAME, null)));
227+       }
228+
229+       @Override
230+       protected boolean computeEnabled() {
231+               return true;
232+       }
233+
234+}
235Index: modules/org.sophie2.base.commons/src/main/resources/distrib/icons/hackicons/decreaseBorder.png
236===================================================================
237Cannot display: file marked as a binary type.
238svn:mime-type = application/octet-stream
239Index: modules/org.sophie2.base.commons/src/main/resources/distrib/icons/hackicons/alignFramesRight.png
240===================================================================
241Cannot display: file marked as a binary type.
242svn:mime-type = application/octet-stream
243Index: modules/org.sophie2.base.commons/src/main/resources/distrib/icons/hackicons/centerAlignmentOn.png
244===================================================================
245Cannot display: file marked as a binary type.
246svn:mime-type = application/octet-stream
247Index: modules/org.sophie2.base.commons/src/main/resources/distrib/icons/hackicons/groupElements.png
248===================================================================
249Cannot display: file marked as a binary type.
250svn:mime-type = application/octet-stream
251Index: modules/org.sophie2.base.commons/src/main/resources/distrib/icons/hackicons/addTemplate.png
252===================================================================
253Cannot display: file marked as a binary type.
254svn:mime-type = application/octet-stream
255Index: modules/org.sophie2.base.commons/src/main/resources/distrib/icons/hackicons/zOrderUp.png
256===================================================================
257Cannot display: file marked as a binary type.
258svn:mime-type = application/octet-stream
259Index: modules/org.sophie2.base.commons/src/main/resources/distrib/icons/hackicons/searchDown.png
260===================================================================
261Cannot display: file marked as a binary type.
262svn:mime-type = application/octet-stream
263Index: modules/org.sophie2.base.commons/src/main/resources/distrib/icons/hackicons/frameBackground.png
264===================================================================
265Cannot display: file marked as a binary type.
266svn:mime-type = application/octet-stream
267Index: modules/org.sophie2.base.commons/src/main/resources/distrib/icons/hackicons/ungroupElements.png
268===================================================================
269Cannot display: file marked as a binary type.
270svn:mime-type = application/octet-stream
271Index: modules/org.sophie2.base.commons/src/main/resources/distrib/icons/hackicons/book.png
272===================================================================
273Cannot display: file marked as a binary type.
274svn:mime-type = application/octet-stream
275Index: modules/org.sophie2.base.commons/src/main/resources/distrib/icons/hackicons/italic.png
276===================================================================
277Cannot display: file marked as a binary type.
278svn:mime-type = application/octet-stream
279Index: modules/org.sophie2.base.commons/src/main/resources/distrib/icons/hackicons/chain.png
280===================================================================
281Cannot display: file marked as a binary type.
282svn:mime-type = application/octet-stream
283Index: modules/org.sophie2.base.commons/src/main/resources/distrib/icons/hackicons/paragraphHalo.png
284===================================================================
285Cannot display: file marked as a binary type.
286svn:mime-type = application/octet-stream
287Index: modules/org.sophie2.base.commons/src/main/resources/distrib/icons/hackicons/justifiedAlignment.png
288===================================================================
289Cannot display: file marked as a binary type.
290svn:mime-type = application/octet-stream
291Index: modules/org.sophie2.base.commons/src/main/resources/distrib/icons/hackicons/resize.png
292===================================================================
293Cannot display: file marked as a binary type.
294svn:mime-type = application/octet-stream
295Index: modules/org.sophie2.main.layout.mydoggy/src/main/java/org/sophie2/main/layout/mydoggy/MDTab.java
296===================================================================
297--- modules/org.sophie2.main.layout.mydoggy/src/main/java/org/sophie2/main/layout/mydoggy/MDTab.java    (revision 2334)
298+++ modules/org.sophie2.main.layout.mydoggy/src/main/java/org/sophie2/main/layout/mydoggy/MDTab.java    (working copy)
299@@ -7,6 +7,7 @@
300 import org.noos.xing.mydoggy.ToolWindow;
301 import org.noos.xing.mydoggy.ToolWindowAnchor;
302 import org.noos.xing.mydoggy.ToolWindowGroup;
303+import org.noos.xing.mydoggy.ToolWindowManager;
304 import org.noos.xing.mydoggy.plaf.MyDoggyToolWindowManager;
305 import org.sophie2.base.layout.model.Palette;
306 import org.sophie2.base.layout.model.Tab;
307@@ -28,6 +29,8 @@
308  * @author nvasilev
309  */
310 public class MDTab extends MDCompoundLayoutElement {
311+       
312+       private static final String GROUP = "Group";
313 
314        // --- Properties ----------------------------------------------------------
315 
316@@ -49,14 +52,15 @@
317        protected Prop<MDFlap> parent() {
318                return getBean().makeParentProp(MDFlap.class);
319        }
320-       
321+
322        @Override
323        public RwProp<ToolWindowAnchor> orientation() {
324                class orientation extends AutoProperty<ToolWindowAnchor> {
325-                       
326+
327                        @Override
328                        protected ToolWindowAnchor compute() {
329-                               if (parent().get() == null || parent().get().orientation().get() == null) {
330+                               if (parent().get() == null
331+                                               || parent().get().orientation().get() == null) {
332                                        return null;
333                                }
334                                return parent().get().orientation().get();
335@@ -64,8 +68,7 @@
336                }
337                return getBean().makeProp(orientation.class);
338        }
339-       
340-       
341+
342        // TODO: this used some bad things to synchronize..
343        // make sure that the following two are executed
344        // // Registering the element in the tool window manager
345@@ -122,32 +125,42 @@
346                                // do nothing
347                        }
348 
349+                       private String oldTitle;
350+
351                        @Override
352                        protected void setup(JPanel swingComponent) {
353                                swingComponent.setLayout(new BorderLayout());
354 
355-                               ToolWindowGroup group = toolWindowManager().get()
356-                                               .getToolWindowGroup(title().get() + "Group");
357+                               String currentTitle = title().get();
358+                               ToolWindowManager toolWindowManager = toolWindowManager().get();
359 
360-                               for (ToolWindow win : toolWindowManager().get()
361-                                               .getToolWindows()) {
362-                                       group.removeToolWindow(win);
363+                               if (!currentTitle.equals(this.oldTitle)) {
364+                                       removeWindowsGroup(this.oldTitle + GROUP);
365+                                       this.oldTitle = currentTitle;
366                                }
367 
368-                               toolWindowManager().get().unregisterAllToolWindow();
369+                               removeWindowsGroup(currentTitle + GROUP);
370+                               toolWindowManager.unregisterAllToolWindow();
371 
372                                for (MDPalette palette : paletteViews().get()) {
373                                        addMDElement(palette);
374                                }
375 
376-                               if (paletteViews().get().size() != 0) {
377-                                       group.setImplicit(true);
378-                                       group.setVisible(true);
379-                               }
380-
381                                swingComponent.add(toolWindowManager().get(),
382                                                BorderLayout.CENTER);
383                        }
384+
385+                       private final void removeWindowsGroup(String groupName) {
386+                               ToolWindowManager toolWindowManager = toolWindowManager().get();
387+                               ToolWindowGroup group = toolWindowManager
388+                                               .getToolWindowGroup(groupName);
389+                               
390+                               for (ToolWindow win : toolWindowManager.getToolWindows()) {
391+                                        group.removeToolWindow(win);
392+                               }
393+                               
394+                               toolWindowManager.removeToolWindowGroup(groupName);
395+                       }
396                }
397 
398                return getBean().makeProp(swingComponent.class);
399@@ -177,7 +190,7 @@
400                // Creating palettes group
401                ToolWindowGroup group = toolWindowManager.getToolWindowGroup(title()
402                                .get()
403-                               + "Group");
404+                               + GROUP);
405 
406                // Adding the pallete to the palettes group
407                ToolWindow paletteToolWindow = toolWindowManager
408@@ -211,7 +224,7 @@
409                // Obtaining palettes group
410                ToolWindowGroup group = toolWindowManager.getToolWindowGroup(title()
411                                .get()
412-                               + "Group");
413+                               + GROUP);
414                ToolWindow paletteToolWindow = toolWindowManager
415                                .getToolWindow(mdPalette.title().get());
416 
417Index: modules/org.sophie2.base.commons/src/main/resources/distrib/icons/hackicons/disapprove.png
418===================================================================
419Cannot display: file marked as a binary type.
420svn:mime-type = application/octet-stream
421Index: modules/org.sophie2.base.commons/src/main/resources/distrib/icons/hackicons/pageBorderHalo.png
422===================================================================
423Cannot display: file marked as a binary type.
424svn:mime-type = application/octet-stream
425Index: modules/org.sophie2.base.commons/src/main/resources/distrib/icons/hackicons/justifiedAlignmentOn.png
426===================================================================
427Cannot display: file marked as a binary type.
428svn:mime-type = application/octet-stream
429Index: modules/org.sophie2.base.commons/src/main/resources/distrib/icons/hackicons/color.png
430===================================================================
431Cannot display: file marked as a binary type.
432svn:mime-type = application/octet-stream
433Index: modules/org.sophie2.base.commons/src/main/resources/distrib/icons/hackicons/paragraphHaloOn.png
434===================================================================
435Cannot display: file marked as a binary type.
436svn:mime-type = application/octet-stream
437Index: modules/org.sophie2.base.skins/src/test/java/org/sophie2/base/skins/SkinsTest.java
438===================================================================
439--- modules/org.sophie2.base.skins/src/test/java/org/sophie2/base/skins/SkinsTest.java  (revision 0)
440+++ modules/org.sophie2.base.skins/src/test/java/org/sophie2/base/skins/SkinsTest.java  (revision 0)
441@@ -0,0 +1,241 @@
442+package org.sophie2.base.skins;
443+
444+import java.util.List;
445+
446+import org.sophie2.core.modularity.FakeModuleRegistry;
447+import org.sophie2.core.modularity.SophieExtension;
448+import org.sophie2.core.modularity.SophieExtensionPoint;
449+import org.sophie2.core.modularity.SophieModule;
450+import org.sophie2.core.prolib.impl.AutoProperty;
451+import org.sophie2.core.prolib.impl.BaseProObject;
452+import org.sophie2.core.prolib.interfaces.Prop;
453+import org.sophie2.core.testing.IntegrationTestBase;
454+
455+/**
456+ * A test for Skins. Should test whether {@link Skin}s are properly changing.
457+ *
458+ * @author peko
459+ *
460+ */
461+public class SkinsTest extends IntegrationTestBase {
462+
463+       // create the skin values for both skins. These are just Strings but can be
464+       // any other types. =>
465+
466+       // default Skin values.
467+       private final static String DEFAULT_SKIN_TOOLTIP = "This is a tool-tip for the SkinsTest";
468+       private final static String DEFAULT_SKIN_TITLE = "This is a title for the SkinsTest";
469+       private final static String DEFAULT_SKIN_STRING = "This is just a String...";
470+
471+       // alternative Skin values.
472+       private final static String ALT_SKIN_TOOLTIP = "Th15 15 4 t00l-t1p f0r the Sk1n5Te5t";
473+       private final static String ALT_SKIN_TITLE = "Th15 15 4 t1tle f0r the 5k1n5Te5t";
474+       private final static String ALT_SKIN_STRING = "Th15 15 ju5t 4 5tr1ng...";
475+
476+       // cool Skin value.
477+       private final static String COOL_SKIN_TITLE = "<html>This is<br>a test title with <br> three lines </html>";
478+
479+       private final static String TITLE_ID = "test-title";
480+       private final static String TOOLTIP_ID = "test-tooltip";
481+       private final static String STRING_ID = "test-string";
482+
483+       // the class for use in the record ids.
484+       private final static Class<DummySkinableComponent> CLAZZ = DummySkinableComponent.class;
485+
486+       private Skin defaultSkin;
487+       private Skin alternativeSkin;
488+
489+       // the third skin will be used to set part of the values
490+       // so that its fallback skin is used.
491+       private Skin coolSkin3;
492+       private static final String COOL_SKIN_NAME = "Cool Skin";
493+
494+       private DummySkinableComponent component;
495+
496+       /**
497+        * A module providing the needed extensions for the test.
498+        *
499+        * @author peko, nenko
500+        *
501+        */
502+       public static class DemoModule extends SophieModule {
503+
504+               @Override
505+               protected void defineExtensionPoints(List<SophieExtensionPoint<?>> res) {
506+                       // TODO Auto-generated method stub
507+
508+               }
509+
510+               @Override
511+               protected void defineExtensions(List<SophieExtension<?>> res) {
512+                       makeSkinParts(res);
513+               }
514+
515+               @SuppressWarnings("synthetic-access")
516+               private void makeSkinParts(List<SophieExtension<?>> list) {
517+                       // the default skin will have two SkinParts.
518+                       // create skin parts and add skin records to them.
519+                       BaseSkinPart part1 = new BaseSkinPart(SkinsNames.DEFAULT_NAME);
520+                       BaseSkinPart part2 = new BaseSkinPart(SkinsNames.DEFAULT_NAME);
521+                       // the alternative skin will have only one skin part.
522+                       BaseSkinPart part3 = new BaseSkinPart(SkinsNames.ALTERNATIVE_NAME);
523+                       // the skinpart for the third skin.
524+                       BaseSkinPart part4 = new BaseSkinPart(COOL_SKIN_NAME);
525+
526+                       part1.add(SkinUtil.getElementId(CLAZZ), TOOLTIP_ID,
527+                                       DEFAULT_SKIN_TOOLTIP);
528+                       part1.add(SkinUtil.getElementId(CLAZZ), TITLE_ID,
529+                                       DEFAULT_SKIN_TITLE);
530+                       part2.add(SkinUtil.getElementId(CLAZZ), STRING_ID,
531+                                       DEFAULT_SKIN_STRING);
532+
533+                       part3.add(SkinUtil.getElementId(CLAZZ), TOOLTIP_ID,
534+                                       ALT_SKIN_TOOLTIP);
535+                       part3.add(SkinUtil.getElementId(CLAZZ), TITLE_ID, ALT_SKIN_TITLE);
536+                       part3.add(SkinUtil.getElementId(CLAZZ), STRING_ID, ALT_SKIN_STRING);
537+
538+                       part4.add(SkinUtil.getElementId(CLAZZ), TITLE_ID, COOL_SKIN_TITLE);
539+
540+                       list.add(part1.asExtension());
541+                       list.add(part2.asExtension());
542+                       list.add(part3.asExtension());
543+                       list.add(part4.asExtension());
544+               }
545+
546+       }
547+
548+       /**
549+        *
550+        * A dummy implementation for a skinable component.
551+        *
552+        * @author peko
553+        *
554+        */
555+       class DummySkinableComponent extends BaseProObject {
556+
557+               /**
558+                * The tool-tip of this component.
559+                *
560+                * @return property.
561+                */
562+               public Prop<String> toolTip() {
563+                       class toolTip extends AutoProperty<String> {
564+
565+                               @SuppressWarnings( { "synthetic-access", "static-access" })
566+                               @Override
567+                               protected String compute() {
568+                                       String res = SkinUtil.getSkinValue(SkinsTest.this.CLAZZ,
569+                                                       TOOLTIP_ID, String.class);
570+                                       return res;
571+                               }
572+                       }
573+                       return getBean().makeProp(toolTip.class);
574+               }
575+
576+               /**
577+                * The title of this component.
578+                *
579+                * @return property.
580+                */
581+               public Prop<String> title() {
582+                       class title extends AutoProperty<String> {
583+
584+                               @SuppressWarnings( { "synthetic-access", "static-access" })
585+                               @Override
586+                               protected String compute() {
587+                                       String res = SkinUtil.getSkinValue(SkinsTest.this.CLAZZ,
588+                                                       TITLE_ID, String.class);
589+                                       return res;
590+                               }
591+                       }
592+                       return getBean().makeProp(title.class);
593+               }
594+
595+               /**
596+                * A string containing property for this component.
597+                *
598+                * @return property.
599+                */
600+               public Prop<String> string() {
601+                       class string extends AutoProperty<String> {
602+
603+                               @SuppressWarnings( { "synthetic-access", "static-access" })
604+                               @Override
605+                               protected String compute() {
606+                                       String res = SkinUtil.getSkinValue(SkinsTest.this.CLAZZ,
607+                                                       STRING_ID, String.class);
608+                                       return res;
609+                               }
610+                       }
611+                       return getBean().makeProp(string.class);
612+               }
613+
614+       }
615+
616+       @SuppressWarnings("unchecked")
617+       @Override
618+       protected void setUp() throws Exception {
619+               super.setUp();
620+
621+               FakeModuleRegistry.start(BaseSkinsModule.class, DemoModule.class);
622+
623+               // the default skin.
624+               this.defaultSkin = new Skin(SkinsNames.DEFAULT_NAME, null);
625+               // an alternative skin.
626+               this.alternativeSkin = new Skin(SkinsNames.ALTERNATIVE_NAME,
627+                               this.defaultSkin);
628+
629+               // the third skin.
630+               this.coolSkin3 = new Skin(COOL_SKIN_NAME, this.defaultSkin);
631+
632+               this.component = new DummySkinableComponent();
633+       }
634+
635+       @Override
636+       protected void tearDown() throws Exception {
637+               FakeModuleRegistry.stop();
638+               super.tearDown();
639+       }
640+
641+       /**
642+        * Tests the whether the changing of {@link Skin}s changes values properly.
643+        */
644+       public void testChangeSkin() {
645+
646+               // setting the skin in the SkinManager.
647+               SkinManager.get().currentSkin().set(this.defaultSkin);
648+
649+               assertSame(SkinsTest.DEFAULT_SKIN_TOOLTIP, this.component.toolTip()
650+                               .get());
651+               assertSame(SkinsTest.DEFAULT_SKIN_TITLE, this.component.title().get());
652+               assertSame(SkinsTest.DEFAULT_SKIN_STRING, this.component.string().get());
653+
654+               // changing the skin in the SkinManager.
655+               SkinManager.get().currentSkin().set(this.alternativeSkin);
656+
657+               assertSame(SkinsTest.ALT_SKIN_TOOLTIP, this.component.toolTip().get());
658+               assertSame(SkinsTest.ALT_SKIN_TITLE, this.component.title().get());
659+               assertSame(SkinsTest.ALT_SKIN_STRING, this.component.string().get());
660+
661+               // resetting the skin to the initial default skin value.
662+               SkinManager.get().currentSkin().set(this.defaultSkin);
663+
664+               assertSame(SkinsTest.DEFAULT_SKIN_TOOLTIP, this.component.toolTip()
665+                               .get());
666+               assertSame(SkinsTest.DEFAULT_SKIN_TITLE, this.component.title().get());
667+               assertSame(SkinsTest.DEFAULT_SKIN_STRING, this.component.string().get());
668+
669+               // setting the cool skin so that the fallback skin is used (the default
670+               // one).
671+               SkinManager.get().currentSkin().set(this.coolSkin3);
672+               // from fallback skin.
673+               assertSame(SkinsTest.DEFAULT_SKIN_TOOLTIP, this.component.toolTip()
674+                               .get());
675+               // from cool skin
676+               assertSame(SkinsTest.COOL_SKIN_TITLE, this.component.title().get());
677+               // from fallback skin again.
678+               assertSame(SkinsTest.DEFAULT_SKIN_STRING, this.component.string().get());
679+
680+       }
681+
682+}
683Index: modules/org.sophie2.base.commons/src/main/resources/distrib/icons/hackicons/LinksHalo.png
684===================================================================
685Cannot display: file marked as a binary type.
686svn:mime-type = application/octet-stream
687Index: modules/org.sophie2.main.app.menus/src/main/java/org/sophie2/main/app/menus/MainAppMenusModule.java
688===================================================================
689--- modules/org.sophie2.main.app.menus/src/main/java/org/sophie2/main/app/menus/MainAppMenusModule.java (revision 2334)
690+++ modules/org.sophie2.main.app.menus/src/main/java/org/sophie2/main/app/menus/MainAppMenusModule.java (working copy)
691@@ -38,7 +38,6 @@
692 import org.sophie2.main.app.menus.insert.InsertMenu;
693 import org.sophie2.main.app.menus.insert.InsertTextItem;
694 import org.sophie2.main.app.menus.skins.DefaultSkinItem;
695-import org.sophie2.main.app.menus.skins.HackersSkinItem;
696 import org.sophie2.main.app.menus.skins.SkinsMenu;
697 import org.sophie2.main.app.menus.tabbar.MinimizeAllItem;
698 import org.sophie2.main.app.menus.tabbar.RestoreAllItem;
699@@ -173,10 +172,6 @@
700                res.add(SimpleVisualProvider.createExtension(DefaultSkinItem.class,
701                                SkinsMenu.class, "default-skin-menu-item", "111-default-skin-menu-item"));
702               
703-               res.add(SimpleVisualProvider.createExtension(HackersSkinItem.class,
704-                               SkinsMenu.class, "hackers-skin-menu-item", "222-hackers-skin-menu-item"));
705-               
706-               
707                AutoVisualProvider.fillExtensions(res, RestoreAllItem.class);
708               
709                res.add(makeSkinPart());
710@@ -387,13 +382,6 @@
711                res.add(SkinUtil.getElementId(DefaultSkinItem.class), MenuMember.MNEMONIC_PROP_ID, 0);
712                res.add(SkinUtil.getElementId(DefaultSkinItem.class), MenuMember.ACCELERATOR_PROP_ID, null);
713 
714-               res.add(SkinUtil.getElementId(HackersSkinItem.class), BaseVisualElement.TITLE_PROP_ID,
715-               "Hackers skin");
716-               res.add(SkinUtil.getElementId(HackersSkinItem.class), BaseVisualElement.TOOL_TIP_PROP_ID,
717-                               "Click to switch to hackers skin.");
718-               res.add(SkinUtil.getElementId(HackersSkinItem.class), MenuMember.MNEMONIC_PROP_ID, 0);
719-               res.add(SkinUtil.getElementId(HackersSkinItem.class), MenuMember.ACCELERATOR_PROP_ID, null);
720-               
721                // help items
722                res.add(SkinUtil.getElementId(HelpMenu.class), BaseVisualElement.TITLE_PROP_ID, "Help");
723                res.add(SkinUtil.getElementId(HelpMenu.class), BaseVisualElement.TOOL_TIP_PROP_ID,
724Index: modules/org.sophie2.base.commons/src/main/resources/distrib/icons/hackicons/pageShadowHalo.png
725===================================================================
726Cannot display: file marked as a binary type.
727svn:mime-type = application/octet-stream
728Index: modules/org.sophie2.base.commons/src/main/resources/distrib/icons/hackicons/showDesktop.png
729===================================================================
730Cannot display: file marked as a binary type.
731svn:mime-type = application/octet-stream
732Index: modules/org.sophie2.base.commons/src/main/resources/distrib/icons/hackicons/multiSelectHaloOff.png
733===================================================================
734Cannot display: file marked as a binary type.
735svn:mime-type = application/octet-stream
736Index: modules/org.sophie2.base.commons/src/main/resources/distrib/icons/hackicons/zOrderDown.png
737===================================================================
738Cannot display: file marked as a binary type.
739svn:mime-type = application/octet-stream
740Index: modules/org.sophie2.base.commons/src/main/resources/distrib/icons/hackicons/frame.png
741===================================================================
742Cannot display: file marked as a binary type.
743svn:mime-type = application/octet-stream
744Index: modules/org.sophie2.author/pom.xml
745===================================================================
746--- modules/org.sophie2.author/pom.xml  (revision 2334)
747+++ modules/org.sophie2.author/pom.xml  (working copy)
748@@ -106,6 +106,11 @@
749                <version>2.0-SNAPSHOT</version>
750             </dependency>     
751             <dependency>
752+               <groupId>org.sophie2</groupId>
753+               <artifactId>org.sophie2.main.func.text</artifactId>
754+               <version>2.0-SNAPSHOT</version>
755+            </dependency>       
756+            <dependency>
757                        <groupId>log4j</groupId>
758                        <artifactId>log4j</artifactId>
759                        <version>1.2.14</version>
760Index: modules/org.sophie2.base.commons/src/main/resources/distrib/icons/hackicons/searchUp.png
761===================================================================
762Cannot display: file marked as a binary type.
763svn:mime-type = application/octet-stream
764Index: modules/org.sophie2.base.commons/src/main/resources/distrib/icons/hackicons/font.png
765===================================================================
766Cannot display: file marked as a binary type.
767svn:mime-type = application/octet-stream
768Index: modules/org.sophie2.base.commons/src/main/resources/distrib/icons/hackicons/leftAlignmentOn.png
769===================================================================
770Cannot display: file marked as a binary type.
771svn:mime-type = application/octet-stream
772Index: modules/org.sophie2.base.commons/src/main/resources/distrib/icons/hackicons/leftAlignment.png
773===================================================================
774Cannot display: file marked as a binary type.
775svn:mime-type = application/octet-stream
776Index: modules/org.sophie2.base.commons/src/main/resources/distrib/icons/hackicons/italicOn.png
777===================================================================
778Cannot display: file marked as a binary type.
779svn:mime-type = application/octet-stream
780Index: modules/org.sophie2.main.skin.alternative/pom.xml
781===================================================================
782--- modules/org.sophie2.main.skin.alternative/pom.xml   (revision 2334)
783+++ modules/org.sophie2.main.skin.alternative/pom.xml   (working copy)
784@@ -49,6 +49,11 @@
785                        <artifactId>org.sophie2.base.skins</artifactId>
786                        <version>2.0-SNAPSHOT</version>
787                </dependency>
788+               <dependency>
789+                       <groupId>org.sophie2</groupId>
790+                       <artifactId>org.sophie2.main.app.menus</artifactId>
791+                       <version>2.0-SNAPSHOT</version>
792+               </dependency>
793        </dependencies>
794        <build>
795                <plugins>
796Index: modules/org.sophie2.base.commons/src/main/resources/distrib/icons/hackicons/bold.png
797===================================================================
798Cannot display: file marked as a binary type.
799svn:mime-type = application/octet-stream
800Index: modules/org.sophie2.main.skin.alternative/src/main/java/org/sophie2/main/skin/alternative/AlternativeSkinModule.java
801===================================================================
802--- modules/org.sophie2.main.skin.alternative/src/main/java/org/sophie2/main/skin/alternative/AlternativeSkinModule.java        (revision 2334)
803+++ modules/org.sophie2.main.skin.alternative/src/main/java/org/sophie2/main/skin/alternative/AlternativeSkinModule.java        (working copy)
804@@ -3,28 +3,33 @@
805 import java.util.List;
806 
807 import org.sophie2.base.commons.util.ImageUtil;
808+import org.sophie2.base.menus.MenuMember;
809 import org.sophie2.base.skins.BaseSkinPart;
810 import org.sophie2.base.skins.Skin;
811 import org.sophie2.base.skins.SkinPart;
812 import org.sophie2.base.skins.SkinRecord;
813+import org.sophie2.base.skins.SkinUtil;
814 import org.sophie2.base.skins.SkinsNames;
815+import org.sophie2.base.visual.BaseVisualElement;
816+import org.sophie2.base.visual.SimpleVisualProvider;
817 import org.sophie2.core.modularity.SophieExtension;
818 import org.sophie2.core.modularity.SophieExtensionPoint;
819 import org.sophie2.core.modularity.SophieModule;
820 import org.sophie2.core.prolib.list.ListEntry;
821+import org.sophie2.main.app.menus.skins.SkinsMenu;
822 
823 /**
824- * This is the {@link SophieModule} defining {@link SkinPart} for the alternative
825- * {@link Skin} in Sophie2.
826+ * This is the {@link SophieModule} defining {@link SkinPart} for the
827+ * alternative {@link Skin} in Sophie2.
828  *
829  * @author nenko, peko
830- *
831+ *
832  */
833 public class AlternativeSkinModule extends SophieModule {
834 
835        @Override
836        protected void defineExtensionPoints(List<SophieExtensionPoint<?>> res) {
837-               //no extension point defined... for now
838+               // no extension point defined... for now
839        }
840 
841        @Override
842@@ -32,6 +37,27 @@
843                BaseSkinPart part = new BaseSkinPart(SkinsNames.ALTERNATIVE_NAME);
844                initSkinPart(part);
845                res.add(part.asExtension());
846+
847+               res.add(SimpleVisualProvider.createExtension(AlternativeSkinItem.class,
848+                               SkinsMenu.class, "alternative-skin-menu-item",
849+                               "222-alternative-skin-menu-item"));
850+
851+               res.add(makeSkinPart());
852+       }
853+
854+       private SophieExtension<SkinPart> makeSkinPart() {
855+               BaseSkinPart res = new BaseSkinPart();
856+               res.add(SkinUtil.getElementId(AlternativeSkinItem.class),
857+                               BaseVisualElement.TITLE_PROP_ID, "Alternative skin");
858+               res.add(SkinUtil.getElementId(AlternativeSkinItem.class),
859+                               BaseVisualElement.TOOL_TIP_PROP_ID,
860+                               "Click to switch to alternative skin.");
861+               res.add(SkinUtil.getElementId(AlternativeSkinItem.class),
862+                               MenuMember.MNEMONIC_PROP_ID, 0);
863+               res.add(SkinUtil.getElementId(AlternativeSkinItem.class),
864+                               MenuMember.ACCELERATOR_PROP_ID, null);
865+
866+               return res.asExtension();
867        }
868 
869        private void initSkinPart(SkinPart part) {
870@@ -40,8 +66,9 @@
871 
872                        Object value = createValue(idParts[1], idParts[2]);
873                        if (value != null) {
874-                               part.records().get().add(new ListEntry(idParts[0], new SkinRecord(
875-                                               idParts[0], value)));
876+                               part.records().get().add(
877+                                               new ListEntry(idParts[0], new SkinRecord(idParts[0],
878+                                                               value)));
879                        }
880                }
881        }
882@@ -51,9 +78,10 @@
883                        return value;
884                }
885                if (type.equals("icon")) {
886-                       return ImageUtil.loadIcon("hackicons"+ System.getProperty("file.separator") + value);
887+                       return ImageUtil.loadIcon("hackicons"
888+                                       + System.getProperty("file.separator") + value);
889                }
890-               
891+
892                return null;
893        }
894 
895Index: modules/org.sophie2.base.commons/src/main/resources/distrib/icons/hackicons/alignElements.png
896===================================================================
897Cannot display: file marked as a binary type.
898svn:mime-type = application/octet-stream
899Index: modules/org.sophie2.base.commons/src/main/resources/distrib/icons/hackicons/pressedChain.png
900===================================================================
901Cannot display: file marked as a binary type.
902svn:mime-type = application/octet-stream
903Index: modules/org.sophie2.base.commons/src/main/resources/distrib/icons/hackicons/minus.png
904===================================================================
905Cannot display: file marked as a binary type.
906svn:mime-type = application/octet-stream
907Index: modules/org.sophie2.base.commons/src/main/resources/distrib/icons/hackicons/unchain.png
908===================================================================
909Cannot display: file marked as a binary type.
910svn:mime-type = application/octet-stream
911Index: modules/org.sophie2.base.commons/src/main/resources/distrib/icons/hackicons/boldOn.png
912===================================================================
913Cannot display: file marked as a binary type.
914svn:mime-type = application/octet-stream
915Index: modules/org.sophie2.base.commons/src/main/resources/distrib/icons/hackicons/frameInsets.png
916===================================================================
917Cannot display: file marked as a binary type.
918svn:mime-type = application/octet-stream
919Index: modules/org.sophie2.main.layout.mydoggy/src/main/java/org/sophie2/main/layout/mydoggy/MDToolWindowFactory.java
920===================================================================
921--- modules/org.sophie2.main.layout.mydoggy/src/main/java/org/sophie2/main/layout/mydoggy/MDToolWindowFactory.java      (revision 2334)
922+++ modules/org.sophie2.main.layout.mydoggy/src/main/java/org/sophie2/main/layout/mydoggy/MDToolWindowFactory.java      (working copy)
923@@ -27,7 +27,7 @@
924                configureDockedDescriptor(toolWindow);
925                configureSlidingDescriptor(toolWindow);
926                configureFloatingDescriptor(toolWindow);
927-               configureFloatingLiveDescriptor(toolWindow);
928+               //configureFloatingLiveDescriptor(toolWindow);
929        }
930 
931        /**
932Index: modules/org.sophie2.base.commons/src/main/resources/distrib/icons/hackicons/increaseBorder.png
933===================================================================
934Cannot display: file marked as a binary type.
935svn:mime-type = application/octet-stream
936Index: modules/org.sophie2.base.commons/src/main/resources/distrib/icons/hackicons/plus.png
937===================================================================
938Cannot display: file marked as a binary type.
939svn:mime-type = application/octet-stream
940Index: modules/org.sophie2.base.commons/src/main/resources/distrib/icons/hackicons/remove.png
941===================================================================
942Cannot display: file marked as a binary type.
943svn:mime-type = application/octet-stream
944Index: modules/org.sophie2.base.commons/src/main/resources/distrib/icons/hackicons/rightAlignment.png
945===================================================================
946Cannot display: file marked as a binary type.
947svn:mime-type = application/octet-stream
948Index: modules/org.sophie2.main.skin.alternative/src/main/java/org/sophie2/main/skin/alternative/SkinDefIds.java
949===================================================================
950--- modules/org.sophie2.main.skin.alternative/src/main/java/org/sophie2/main/skin/alternative/SkinDefIds.java   (revision 2334)
951+++ modules/org.sophie2.main.skin.alternative/src/main/java/org/sophie2/main/skin/alternative/SkinDefIds.java   (working copy)
952@@ -11,244 +11,6 @@
953  */
954 public class SkinDefIds {
955 
956-//     static String DEFAULT_SKIN_DEF_IDS [] = {               
957-//             "main.func.config.config-tab/title : text : Config",
958-//             "main.func.config.config-tab/tool-tip : text : instruments for application configuration.",
959-//             "main.func.config.plugin-about-palette/title : text : Plugin information",
960-//             "main.func.config.plugin-about-palette/tool-tip : text : Displays information about the currently registered plugin.",
961-//             "main.func.config.plugins-palette/title : text : Plugins",
962-//             "main.func.config.plugins-palette/tool-tip : text : List of available application plugins.",
963-//             "app.menus.file-menu/title : text : File",
964-//             "app.menus.file-menu/tool-tip : text : File menu",
965-//             "app.menus.file.new-book-menu-item/title : text : New Book",
966-//             "app.menus.file.new-book-menu-item/tool-tip : text : Create a new book.",
967-//             "app.menus.file.open-book-menu-item/title : text : open Book",
968-//             "app.menus.file.open-book-menu-item/tool-tip : text : open an existing book.",
969-//             "app.menus.file.save-book-menu-item/title : text : save",
970-//             "app.menus.file.save-book-menu-item/tool-tip : text : save the current book to a file.",
971-//             "app.menus.file.save-book-as-menu-item/title : text : save as",
972-//             "app.menus.file.save-book-as-menu-item/tool-tip : text : save the current book to another file.",
973-//             "app.menus.file.save-book-as-template-menu-item/title : text : save as Template",
974-//             "app.menus.file.save-book-as-template-menu-item/tool-tip : text : save the current book as a template.",
975-//             "app.menus.file.book-properties-menu-item/title : text : Book Properties",
976-//             "app.menus.file.book-properties-menu-item/tool-tip : text : show the properties of the current book.",
977-//             "app.menus.file.close-book-menu-item/title : text : Close",
978-//             "app.menus.file.close-book-menu-item/tool-tip : text : Close the current book.",
979-//             "app.menus.file.exit-menu-item/title : text : Quit sophie 2",
980-//             "app.menus.file.exit-menu-item/tool-tip : text : Close sophie 2.",
981-//             "app.menus.edit-menu/title : text : edit",
982-//             "app.menus.edit-menu/tool-tip : text : edit menu",
983-//             "app.menus.edit.undo-menu-item/title : text : {generated}",
984-//             "app.menus.edit.undo-menu-item/tool-tip : text : Revert the last change made.",
985-//             "app.menus.edit.redo-menu-item/title : text : {generated}",
986-//             "app.menus.edit.redo-menu-item/tool-tip : text : Restore the last reverted change.",
987-//             "app.menus.edit.set-title-menu-item/title : text : set Title",
988-//             "app.menus.edit.set-title-menu-item/tool-tip : text : set the title of the current book.",
989-//             "app.menus.edit.show-connections-menu-item/title : text : {generated}",
990-//             "app.menus.edit.show-connections-menu-item/tool-tip : text : Toggle the display of text frame chain connections.",
991-//             "app.menus.insert-menu/title : text : ToDo",
992-//             "app.menus.insert-menu/tool-tip : text : insert menu",
993-//             "app.menus.insert.insert-text-menu-item/title : text : Text",
994-//             "app.menus.insert.insert-text-menu-item/tool-tip : text : add a text frame to the current page.",
995-//             "app.menus.window-menu/title : text : Window",
996-//             "app.menus.window-menu/tool-tip : text : Window menu",
997-//             "app.menus.window.cascade-menu-item/title : text : Cascade",
998-//             "app.menus.window.cascade-menu-item/tool-tip : text : Cascade the open documents.",
999-//             "app.menus.window.tile-menu-item/title : text : Tile",
1000-//             "app.menus.window.tile-menu-item/tool-tip : text : Tile the open documents.",
1001-//             "app.menus.window.document-menu-item/title : text : {generated:document-title}",
1002-//             "app.menus.window.document-menu-item/tool-tip : text : null",
1003-//             "app.menus.help-menu/title : text : Help",
1004-//             "app.menus.help-menu/tool-tip : text : Help menu",
1005-//             "org.sophie2.main.app.menus.tabbar.MinimizeAllItem/title : text : Minimizeall",
1006-//             "org.sophie2.main.app.menus.tabbar.MinimizeAllItem/tool-tip : text : Click here to hide all windows and show the desktop.",
1007-//             "main.view.menus.tabbar.restore-all-item/title : text : Restoreall",
1008-//             "main.view.menus.tabbar.restore-all-item/tool-tip : text : Click here to show all windows that are minimized.",
1009-//             "main.view.layout.books-tab/title : text : Books",
1010-//             "main.view.layout.books-tab/tool-tip : text : instruments for books.",
1011-//             "main.view.layout.books.open-books-palette/title : text : open Books",
1012-//             "main.view.layout.books.open-books-palette/tool-tip : text : List of open books",
1013-//             "main.view.layout.pages.page-preview-palette/title : text : Page Preview",
1014-//             "main.view.layout.pages.page-preview-palette/tool-tip : text : Preview of the book pages.",
1015-//             "main.view.layout.pages-tab/title : text : Pages",
1016-//             "main.view.layout.pages-tab/tool-tip : text : instruments for pages",
1017-//             "main.view.layout.timelines-tab/title : text : Timelines",
1018-//             "main.view.layout.timelines-tab/tool-tip : text : instruments for timelines.",
1019-//             "main.view.layout.tools.search-palette/title : text : search",
1020-//             "main.view.layout.tools.search-palette/tool-tip : text : allows searching in the text content of the book.",
1021-//             "main.view.layout.tools-tab/title : text : Tools",
1022-//             "main.view.layout.tools-tab/tool-tip : text : Book related instruments",
1023-//             "main.view.layout.library.book-templates-palette/title : text : Book Templates",
1024-//             "main.view.layout.library.book-templates-palette/tool-tip : text : Templates for new books.",
1025-//             "main.view.layout.library.components-palette/title : text : Frames",
1026-//             "main.view.layout.library.components-palette/tool-tip : text : Frame components",
1027-//             "main.view.layout.library-tab/title : text : Library",
1028-//             "main.view.layout.library-tab/tool-tip : text : Provides book and frame components",
1029-//             "main.view.layout.library.page-templates-palette/title : text : Page Templates Palette",
1030-//             "main.view.layout.library.page-templates-palette/tool-tip : text : Templates for new Pages",
1031-//             "main.view.layout.library.frame-templates-palette/title : text : Frame Templates Palette",
1032-//             "main.view.layout.library.frame-templates-palette/tool-tip : text : Templates for new Frames",
1033-//             "main.view.layout.styles-tab/title : text : styles",
1034-//             "main.view.layout.styles-tab/tool-tip : text : style related palettes.",
1035-//             "main.func.servers.servers-tab/title : text : servers",
1036-//             "main.func.servers.servers-tab/tool-tip : text : server related things.",
1037-//             "main.func.servers.connections-palette/title : text : Connections",
1038-//             "main.func.servers.connections-palette/tool-tip : text : server connections.",
1039-//             "main.view.layout.books.embedded-books-palette/title : text : embedded Books",
1040-//             "main.view.layout.books.embedded-books-palette/tool-tip : text : List of currently embedded books.",
1041-//             "main.view.layout.resources.all-resources-palette/title : text : Resources",
1042-//             "main.view.layout.resources.all-resources-palette/tool-tip : text : all resources currently used in the book.",
1043-//             "main.view.layout.resources-tab/title : text : Resources",
1044-//             "main.view.layout.resources-tab/tool-tip : text : The resources in the current book",
1045-//             "org.sophie2.main.app.halos.huds.BackgroundAndBorderHud$BorderInsetsTop/title : text : Top border size:",
1046-//             "org.sophie2.main.app.halos.huds.BackgroundAndBorderHud$BorderInsetsTop/tool-tip : text : Change the top size of the border.",
1047-//             "base.bound.base-bound-control/ok-icon : icon : approve.png",
1048-//             "base.bound.base-bound-control/error-icon : icon : disapprove.png",
1049-//             "org.sophie2.main.app.halos.huds.BackgroundAndBorderHud$BorderInsetsRight/title : text : Right border size:",
1050-//             "org.sophie2.main.app.halos.huds.BackgroundAndBorderHud$BorderInsetsRight/tool-tip : text : Change the right size of the border.",
1051-//             "org.sophie2.main.app.halos.huds.BackgroundAndBorderHud$BorderInsetsBottom/title : text : Bottom border size:",
1052-//             "org.sophie2.main.app.halos.huds.BackgroundAndBorderHud$BorderInsetsBottom/tool-tip : text : Change the bottom size of the border.",
1053-//             "org.sophie2.main.app.halos.huds.BackgroundAndBorderHud$BorderInsetsLeft/title : text : Left border size:",
1054-//             "org.sophie2.main.app.halos.huds.BackgroundAndBorderHud$BorderInsetsLeft/tool-tip : text : Change the left size of the border.",
1055-//             "org.sophie2.main.app.halos.huds.BackgroundAndBorderHud$BorderColorField/title : text : Border color:",
1056-//             "org.sophie2.main.app.halos.huds.BackgroundAndBorderHud$BorderColorField/tool-tip : text : Change the color of the border",
1057-//             "org.sophie2.main.app.halos.huds.BackgroundAndBorderHud$BorderUseTemplate/title : text : Border template: ",
1058-//             "org.sophie2.main.app.halos.huds.BackgroundAndBorderHud$BorderUseTemplate/tool-tip : text : Use the border from the template.",
1059-//             "org.sophie2.main.app.halos.huds.BackgroundAndBorderHud$BorderLocked/title : text : Lock the border: ",
1060-//             "org.sophie2.main.app.halos.huds.BackgroundAndBorderHud$BorderLocked/tool-tip : text : Prevent the border from any changes.",
1061-//             "org.sophie2.main.app.halos.huds.BackgroundAndBorderHud$BackgroundColorField/title : text : Background color:",
1062-//             "org.sophie2.main.app.halos.huds.BackgroundAndBorderHud$BackgroundColorField/tool-tip : text : Change the color of the background",
1063-//             "org.sophie2.main.app.halos.huds.BackgroundAndBorderHud$FrameVisibleCheck/title : text : Frame visible: ",
1064-//             "org.sophie2.main.app.halos.huds.BackgroundAndBorderHud$FrameVisibleCheck/tool-tip : text : toggle the initial visibility of the frame.",
1065-//             "main.view.halos.huds.background-and-border-hud/tool-tip : text : edit the border and background of a frame.",
1066-//             "main.view.halos.shared.background-and-border-halo-button/tool-tip : text : Change the border and background.",
1067-//             "main.view.halos.shared.background-and-border-halo-button/halo-icon : icon : frameBackground.png",
1068-//             "org.sophie2.main.app.halos.huds.InsetsHud$FramePaddingTop/title : text : Top padding:",
1069-//             "org.sophie2.main.app.halos.huds.InsetsHud$FramePaddingTop/tool-tip : text : Change the top padding of the frame.",
1070-//             "org.sophie2.main.app.halos.huds.InsetsHud$FramePaddingRight/title : text : Right padding:",
1071-//             "org.sophie2.main.app.halos.huds.InsetsHud$FramePaddingRight/tool-tip : text : Change the right padding of the frame.",
1072-//             "org.sophie2.main.app.halos.huds.InsetsHud$FramePaddingBottom/title : text : Bottom padding:",
1073-//             "org.sophie2.main.app.halos.huds.InsetsHud$FramePaddingBottom/tool-tip : text : Change the bottom padding of the frame.",
1074-//             "org.sophie2.main.app.halos.huds.InsetsHud$FramePaddingLeft/title : text : Left padding:",
1075-//             "org.sophie2.main.app.halos.huds.InsetsHud$FramePaddingLeft/tool-tip : text : Change the left padding of the frame.",
1076-//             "org.sophie2.main.app.halos.huds.InsetsHud$FrameMarginRight/title : text : Right margin:",
1077-//             "org.sophie2.main.app.halos.huds.InsetsHud$FrameMarginRight/tool-tip : text : Change the right margin of the frame.",
1078-//             "org.sophie2.main.app.halos.huds.InsetsHud$FrameMarginBottom/title : text : Bottom margin:",
1079-//             "org.sophie2.main.app.halos.huds.InsetsHud$FrameMarginBottom/tool-tip : text : Change the bottom margin of the frame.",
1080-//             "org.sophie2.main.app.halos.huds.InsetsHud$FrameMarginLeft/title : text : Left margin:",
1081-//             "org.sophie2.main.app.halos.huds.InsetsHud$FrameMarginLeft/tool-tip : text : Change the left margin of the frame.",
1082-//             "main.view.halos.huds.insets-hud/tool-tip : text : edit the padding/margin properties of a frame.",
1083-//             "main.view.halos.frame.frame-insets-halo-button/tool-tip : text : edit frame margin and padding settings.",
1084-//             "main.view.halos.frame.frame-insets-halo-button/halo-icon : icon : frameInsets.png",
1085-//             "main.view.halos.frame.frame-z-order-up-halo-button/tool-tip : text : increase the z-order of this frame.",
1086-//             "main.view.halos.frame.frame-z-order-up-halo-button/halo-icon : icon : zOrderUp.png",
1087-//             "main.view.halos.frame.frame-z-order-down-halo-button/tool-tip : text : Decrease the z-order of this frame.",
1088-//             "main.view.halos.frame.frame-z-order-down-halo-button/halo-icon : icon : zOrderDown.png",
1089-//             "org.sophie2.main.app.halos.huds.ShadowHud$ShadowPositionX/title : text : X:",
1090-//             "org.sophie2.main.app.halos.huds.ShadowHud$ShadowPositionX/tool-tip : text : Change the shadow on the X axis.",
1091-//             "org.sophie2.main.app.halos.huds.ShadowHud$ShadowPositionY/title : text : Y:",
1092-//             "org.sophie2.main.app.halos.huds.ShadowHud$ShadowPositionY/tool-tip : text : Change the shadow on the Y axis.",
1093-//             "org.sophie2.main.app.halos.huds.ShadowHud$ShadowColorField/title : text : Color:",
1094-//             "org.sophie2.main.app.halos.huds.ShadowHud$ShadowColorField/tool-tip : text : Change the color of the shadow",
1095-//             "main.view.halos.huds.shadow-hud/tool-tip : text : edit the shadow properties of a page.",
1096-//             "main.view.halos.frame.frame-shadow-halo-button/tool-tip : text : edit shadow settings.",
1097-//             "main.view.halos.frame.frame-shadow-halo-button/halo-icon : icon : pageShadowHalo.png",
1098-//             "main.view.halos.frame.frame-content-use-template-halo-button/tool-tip : text : Use the content from the template.",
1099-//             "main.view.halos.frame.frame-content-use-template-halo-button/icon-on : icon : useTemplateOn.png",
1100-//             "main.view.halos.frame.frame-content-use-template-halo-button/icon-off : icon : useTemplateOff.png",
1101-//             "main.view.halos.page.page-frames-use-template-halo-button/tool-tip : text : show the frames from the template.",
1102-//             "main.view.halos.page.page-frames-use-template-halo-button/icon-on : icon : useTemplateOn.png",
1103-//             "main.view.halos.page.page-frames-use-template-halo-button/icon-off : icon : useTemplateOff.png",
1104-//             "main.view.shared.frame.add-template/tool-tip : text : add the object as a template.",
1105-//             "main.view.shared.frame.add-template/halo-icon : icon : addTemplate.png",
1106-//             "org.sophie2.main.app.halos.align.AlignElementsLeft/title : text : align left",
1107-//             "org.sophie2.main.app.halos.align.AlignElementsLeft/tool-tip : text : Click to align selected elements' left sides.",
1108-//             "org.sophie2.main.app.halos.align.AlignElementsRight/title : text : align right",
1109-//             "org.sophie2.main.app.halos.align.AlignElementsRight/tool-tip : text : Click to align selected elements' right sides.",
1110-//             "org.sophie2.main.app.halos.align.AlignElementsTop/title : text : align top",
1111-//             "org.sophie2.main.app.halos.align.AlignElementsTop/tool-tip : text : Click to align selected elements' top sides.",
1112-//             "org.sophie2.main.app.halos.align.AlignElementsBottom/title : text : align bottom",
1113-//             "org.sophie2.main.app.halos.align.AlignElementsBottom/tool-tip : text : Click to align selected elements' bottom sides.",
1114-//             "org.sophie2.main.app.halos.align.AlignElementsHorizontally/title : text : align horizontally",
1115-//             "org.sophie2.main.app.halos.align.AlignElementsHorizontally/tool-tip : text : Click to align selected elements' horizontally.",
1116-//             "org.sophie2.main.app.halos.align.AlignElementsVertically/title : text : align vertically",
1117-//             "org.sophie2.main.app.halos.align.AlignElementsVertically/tool-tip : text : Click to align selected elements' vertically.",
1118-//             "main.view.halos.align.aligning-page-elements-hud/tool-tip : text : align the selected page elements.",
1119-//             "main.view.halos.buttons.huds.align-elements-halo-button/tool-tip : text : align the selected page elements.",
1120-//             "main.view.halos.buttons.huds.align-elements-halo-button/halo-icon : icon : alignElements.png",
1121-//             "main.view.halos.grouping.group-page-elements-button/tool-tip : text : Click to group the selected page elements.",
1122-//             "main.view.halos.grouping.group-page-elements-button/halo-icon : icon : groupElements.png",
1123-//             "main.view.halos.grouping.ungroup-page-elements-button/tool-tip : text : Click to ungroup the selected page elements.",
1124-//             "main.view.halos.grouping.ungroup-page-elements-button/halo-icon : icon : ungroupElements.png",
1125-//             "org.sophie2.main.func.links.LinksHud$CurrentRule/title : text : Rule:",
1126-//             "org.sophie2.main.func.links.LinksHud$CurrentRule/tool-tip : text : select a rule",
1127-//             "org.sophie2.main.func.links.LinksHud$AddRule/tool-tip : text : add new rule",
1128-//             "org.sophie2.main.func.links.LinksHud$RemoveRule/tool-tip : text : Remove the selected rule",
1129-//             "org.sophie2.main.func.links.LinksHud$AvailableTriggers/title : text : Trigger:",
1130-//             "org.sophie2.main.func.links.LinksHud$AvailableTriggers/tool-tip : text : select a trigger for this rule",
1131-//             "org.sophie2.main.func.links.LinksHud$AvailableActions/title : text : action:",
1132-//             "org.sophie2.main.func.links.LinksHud$AvailableActions/tool-tip : text : select action for this rule",
1133-//             "org.sophie2.main.func.links.actions.navigation.GoToPageConfigurationPanel$AvailablePages/title : text : Go to page:",
1134-//             "org.sophie2.main.func.links.actions.navigation.GoToPageConfigurationPanel$AvailablePages/tool-tip : text : Go To Page",
1135-//             "org.sophie2.main.func.links.actions.showing.ShowFrameConfigurationPanel$FrameSelector/title : text : select frame:",
1136-//             "org.sophie2.main.func.links.actions.showing.ShowFrameConfigurationPanel$FrameSelector/tool-tip : text : show frame",
1137-//             "main.func.links.links-hud/tool-tip : text : Manage links.",
1138-//             "main.func.links.links-halo-button/tool-tip : text : Manage links.",
1139-//             "main.func.links.links-halo-button/halo-icon : icon : LinksHalo.png",
1140-//             "main.view.halos.frame.move.frame-move-halo-button/halo-icon : icon : move.png",
1141-//             "main.view.halos.frame.move.frame-move-halo-button/tool-tip : text : Drag to move the frame",
1142-//             "main.view.halos.frame.move.frame-remove-halo-button/halo-icon : icon : remove.png",
1143-//             "main.view.halos.frame.move.frame-remove-halo-button/tool-tip : text : Click to delete the frame.",
1144-//             "extra.annotations.sticky-remove-halo-button/halo-icon : icon : remove.png",
1145-//             "extra.annotations.sticky-remove-halo-button/tool-tip : text : Click to remove the sticky",
1146-//             "org.sophie2.main.func.text.halos.TextFontHud$TextItalicStyle/title : text : italic:",
1147-//             "org.sophie2.main.func.text.halos.TextFontHud$TextItalicStyle/tool-tip : text : set on/off italic",
1148-//             "org.sophie2.main.func.text.halos.TextFontHud$TextBoldStyle/title : text : Bold: ",
1149-//             "org.sophie2.main.func.text.halos.TextFontHud$TextBoldStyle/tool-tip : text : set on/off bold.",
1150-//             "org.sophie2.main.func.text.halos.TextFontHud$TextUnderlineStyle/title : text : Underline: ",
1151-//             "org.sophie2.main.func.text.halos.TextFontHud$TextUnderlineStyle/tool-tip : text : set on/off underline",
1152-//             "org.sophie2.main.func.text.halos.TextFontHud$TextStrikethroughStyle/title : text : strikethrough: ",
1153-//             "org.sophie2.main.func.text.halos.TextFontHud$TextStrikethroughStyle/tool-tip : text : set on/off strikethrough",
1154-//             "main.func.text.hud.text-font/tool-tip : text : Choose font family name, size adn style",
1155-//             "main.func.text.halos.text-font-button/tool-tip : text : Choose font",
1156-//             "main.func.text.halos.text-font-button/halo-icon : icon : font.png",
1157-//             "org.sophie2.main.app.commons.app.AppTabBar/title : text : TabBar",
1158-//             "org.sophie2.main.app.commons.app.AppTabBar/tool-tip : text : open Books",
1159-//             "org.sophie2.main.app.commons.app.AppTabBar/show-desktop-icon : icon : showDesktop.png",
1160-//             "org.sophie2.main.app.commons.app.AppTabBar/show-desktop-tool-tip : text : Click here to hide all windows and show the desktop.",
1161-//             "app.menus.file.file-print-menu-item/title : text : Print...",
1162-//             "app.menus.file.file-print-menu-item/tool-tip : text : Print current book",
1163-//             "app.menus.file.file-print-to-file-menu-item/title : text : Print To File...",
1164-//             "app.menus.file.file-print-to-file-menu-item/tool-tip : text : Print current book to file",
1165-//             "app.menus.insert.insert-image-menu-item/title : text : image",
1166-//             "app.menus.insert.insert-image-menu-item/tool-tip : text : add an image frame to the current page.",
1167-//             "app.menus.insert.insert-audio-menu-item/title : text : audio",
1168-//             "app.menus.insert.insert-audio-menu-item/tool-tip : text : add an audio frame to the current page.",
1169-//             "app.menus.insert.insert-video-menu-item/title : text : Video",
1170-//             "app.menus.insert.insert-video-menu-item/tool-tip : text : add a video frame to the current page.",
1171-//             "app.menus.insert.insert-pdf-menu-item/title : text : Pdf",
1172-//             "app.menus.insert.insert-pdf-menu-item/tool-tip : text : add a PDF frame to the current page.",
1173-//             "app.menus.insert.insert-book-menu-item/title : text : Book",
1174-//             "app.menus.insert.insert-book-menu-item/tool-tip : text : embed a book in the current page.",
1175-//             "app.menus.help.help-contents-menu-item/title : text : Help Contents",
1176-//             "app.menus.help.help-contents-menu-item/tool-tip : text : Displays the main help index",
1177-//             "app.menus.help.about-menu-item/title : text : about",
1178-//             "app.menus.help.about-menu-item/tool-tip : text : Displays version information, license used, etc.",
1179-//             "extra.annotations.all-annotations-palette/title : text : all annotations",
1180-//             "extra.annotations.all-annotations-palette/tool-tip : text : Load/save annotations, manage annotations from different users",
1181-//             "extra.annotations.stickies-palette/title : text : stickies",
1182-//             "extra.annotations.stickies-palette/tool-tip : text : add new sticky, show or hide stickies",
1183-//             "main.view.layout.resources.book-extras/title : text : Book extras",
1184-//             "main.view.layout.resources.book-extras/tool-tip : text : Manage book extras - show/hide, export/import, etc.",
1185-//             "extra.annotations.annotations-tab/title : text : annotations",
1186-//             "extra.annotations.annotations-tab/tool-tip : text : stick notes to the book, highlight some text or record your voice comments",
1187-//             "main.view.layout.resources.resources-detail-palette/tool-tip : text : Detail View",
1188-//             "main.view.layout.resources.resources-detail-palette/title : text : Detail View",
1189-//             "main.view.layout.changes.all-changes-palette/title : text : Changes",
1190-//             "main.view.layout.changes.all-changes-palette/tool-tip : text : all changes done..",
1191-//             "main.view.halos.page.resize.page-resize-halo-button/halo-icon : icon : resize.png"                     
1192-//             };
1193-       
1194        /**
1195         * Alternative skin's definintion.
1196         */
1197Index: modules/org.sophie2.base.commons/src/main/resources/distrib/icons/hackicons/centerAlignment.png
1198===================================================================
1199Cannot display: file marked as a binary type.
1200svn:mime-type = application/octet-stream
1201Index: modules/org.sophie2.base.commons/src/main/resources/distrib/icons/hackicons/move.png
1202===================================================================
1203Cannot display: file marked as a binary type.
1204svn:mime-type = application/octet-stream
1205Index: modules/org.sophie2.base.commons/src/main/resources/distrib/icons/hackicons/useTemplateOff.png
1206===================================================================
1207Cannot display: file marked as a binary type.
1208svn:mime-type = application/octet-stream
1209Index: modules/org.sophie2.base.commons/src/main/resources/distrib/icons/hackicons/borderColor.png
1210===================================================================
1211Cannot display: file marked as a binary type.
1212svn:mime-type = application/octet-stream