Index: buix/src/java/org/codelutin/buix/Buix.java diff -u buix/src/java/org/codelutin/buix/Buix.java:1.48 buix/src/java/org/codelutin/buix/Buix.java:1.49 --- buix/src/java/org/codelutin/buix/Buix.java:1.48 Fri Sep 10 15:39:01 2004 +++ buix/src/java/org/codelutin/buix/Buix.java Thu Sep 16 16:36:22 2004 @@ -23,10 +23,10 @@ * * @author Benjamin Poussin * Copyright Code Lutin -* @version $Revision: 1.48 $ +* @version $Revision: 1.49 $ * -* Mise a jour: $Date: 2004/09/10 15:39:01 $ -* par : $Author: mazelier $ +* Mise a jour: $Date: 2004/09/16 16:36:22 $ +* par : $Author: bpoussin $ */ package org.codelutin.buix; @@ -101,24 +101,24 @@ */ public class Buix extends BuixUI implements BuixSelectionListener{ // Buix - Object bean = null; + protected Object bean = null; - ShelfTreeModel treeModel = null; - ShelfTreeModel clipBoardTreeModel = null; - BeanPropertiesTableModel allPropertiesModel = null; - BeanSelectionPropertiesTableModel selectionPropertiesModel = null; - BeanEventListModel beanEventModel = null; - ActivateEventListModel activateEventListModel = null; - BeanLayoutPropertiesTableModel layoutPropertiesModel = null; - BuixSelectionModel selectionModel = null; - RootPaneContainer window = null; - - Component rootComponent = null; - File currentFile = null; - BuixPreferences pref = null; - BuixGlassPane previewGlassPane = null; - BuixGlassPane clipBoardGlassPane = null; - URLClassLoader classLoader = null; + protected ShelfTreeModel treeModel = null; + protected ShelfTreeModel clipBoardTreeModel = null; + protected BeanPropertiesTableModel allPropertiesModel = null; + protected BeanSelectionPropertiesTableModel selectionPropertiesModel = null; + protected BeanEventListModel beanEventModel = null; + protected ActivateEventListModel activateEventListModel = null; + protected BeanLayoutPropertiesTableModel layoutPropertiesModel = null; + protected BuixSelectionModel selectionModel = null; + protected RootPaneContainer window = null; + + protected Component rootComponent = null; + protected File currentFile = null; + protected BuixPreferences pref = null; + protected BuixGlassPane previewGlassPane = null; + protected BuixGlassPane clipBoardGlassPane = null; + protected URLClassLoader classLoader = null; static public void main(String [] args){ try{ @@ -877,7 +877,7 @@ BuixXMLEncoder e = (BuixXMLEncoder)buixXMLEncoderConst.newInstance(initargs); - + widgetManager.setDelegate(e); e.writeObject(getRootComponent()); e.close(); @@ -900,7 +900,7 @@ try{ XMLEncoder e = new XMLEncoder(new BufferedOutputStream( new FileOutputStream(file))); - e.setPersistenceDelegate(org.codelutin.topia.ui.swing.TopiaPanel.class, new org.codelutin.buix.BuixXMLEncoder.TopiaPanel_PersistenceDelegate()); + widgetManager.setDelegate(e); e.writeObject(getRootComponent()); e.close(); }catch(Exception eee){ Index: buix/src/java/org/codelutin/buix/BuixXMLEncoder.java diff -u buix/src/java/org/codelutin/buix/BuixXMLEncoder.java:1.23 buix/src/java/org/codelutin/buix/BuixXMLEncoder.java:1.24 --- buix/src/java/org/codelutin/buix/BuixXMLEncoder.java:1.23 Tue Aug 10 17:08:59 2004 +++ buix/src/java/org/codelutin/buix/BuixXMLEncoder.java Thu Sep 16 16:36:22 2004 @@ -23,10 +23,10 @@ * * @author Benjamin Poussin * Copyright Code Lutin -* @version $Revision: 1.23 $ +* @version $Revision: 1.24 $ * -* Mise a jour: $Date: 2004/08/10 17:08:59 $ -* par : $Author: mazelier $ +* Mise a jour: $Date: 2004/09/16 16:36:22 $ +* par : $Author: bpoussin $ */ package org.codelutin.buix; @@ -83,8 +83,6 @@ super(); this.writer = new UIModelWriter(packageName, out); - - setPersistenceDelegate(org.codelutin.topia.ui.swing.TopiaPanel.class, new TopiaPanel_PersistenceDelegate()); } /** @@ -387,33 +385,6 @@ map.put(target, result = new ArrayList()); } return result; - } - - /** - * Classe interne PersistenceDelegate pour les panels generes par Topia - * ainsi l'ensemble des enfants des panels seront visibles - */ - public static class TopiaPanel_PersistenceDelegate extends DefaultPersistenceDelegate { - protected void initialize(Class type, Object oldInstance, Object newInstance, Encoder out) { - super.initialize(type, oldInstance, newInstance, out); - // Ignore the children of a JScrollPane. - // Pending(milne) find a better way to do this. - if (oldInstance instanceof javax.swing.JScrollPane) { - return; - } - java.awt.Container oldC = (java.awt.Container)oldInstance; - java.awt.Component[] oldChildren = oldC.getComponents(); - java.awt.Container newC = (java.awt.Container)newInstance; - //java.awt.Component[] newChildren = (newC == null) ? new java.awt.Component[0] : newC.getComponents(); - - System.out.println("********** old.size: "+ oldC.getComponents().length); - System.out.println("********** new.size: "+ newC.getComponents().length); - - for(int i = 0; i < oldChildren.length; i++) { - out.writeStatement(new Statement(oldInstance, "add", - new Object[]{oldChildren[i]})); - } - } } } // BuixXMLEncoder Index: buix/src/java/org/codelutin/buix/WidgetManager.java diff -u buix/src/java/org/codelutin/buix/WidgetManager.java:1.21 buix/src/java/org/codelutin/buix/WidgetManager.java:1.22 --- buix/src/java/org/codelutin/buix/WidgetManager.java:1.21 Fri Sep 10 15:39:01 2004 +++ buix/src/java/org/codelutin/buix/WidgetManager.java Thu Sep 16 16:36:22 2004 @@ -23,10 +23,10 @@ * * @author Benjamin Poussin * Copyright Code Lutin - * @version $Revision: 1.21 $ + * @version $Revision: 1.22 $ * - * Mise a jour: $Date: 2004/09/10 15:39:01 $ - * par : $Author: mazelier $ + * Mise a jour: $Date: 2004/09/16 16:36:22 $ + * par : $Author: bpoussin $ */ package org.codelutin.buix; @@ -34,36 +34,31 @@ import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.Image; - import java.beans.BeanInfo; +import java.beans.Encoder; import java.beans.IntrospectionException; import java.beans.Introspector; - +import java.beans.PersistenceDelegate; import java.io.File; - import java.net.MalformedURLException; import java.net.URL; import java.net.URLClassLoader; - import java.util.ArrayList; +import java.util.Collection; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; +import java.util.LinkedList; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; -import java.util.Collection; - import javax.swing.Icon; import javax.swing.ImageIcon; - -import org.codelutin.widget.MessageDialog; import org.codelutin.util.Resource; - +import org.codelutin.widget.MessageDialog; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; -import java.util.LinkedList; /** * Boite a widget, cette classe sert a savoir qu'elle est le widget actuellement @@ -71,10 +66,12 @@ */ public class WidgetManager implements ActionListener { // WidgetManager - ShelfButton currentButton = null; - WidgetButton selectionWidget = null; - ArrayList widgets = new ArrayList(); - HashSet listeners = new HashSet(); + protected ShelfButton currentButton = null; + protected WidgetButton selectionWidget = null; + protected ArrayList widgets = new ArrayList(); + protected HashSet listeners = new HashSet(); + + protected HashMap delegateMap = new HashMap(); public WidgetManager(){ currentButton = getSelectionWidget(); @@ -82,6 +79,43 @@ } /** + * Methode pour charger les encoder delegate issus du fichier xml + */ + public void loadEncoderDelegate(URL url){ + try{ + SAXReader reader = new SAXReader(); + Document doc = reader.read(url); + Element root = doc.getRootElement(); + List rootElem = root.selectNodes("child::encoder"); + + for(Iterator i=rootElem.iterator(); i.hasNext();){ + Element node = (Element)i.next(); + try{ + String classname = node.attributeValue("class"); + String delegate = node.attributeValue("delegate"); + Class clazz = Class.forName(classname); + Class delegatez = Class.forName(delegate); + Object pd = delegatez.newInstance(); + delegateMap.put(clazz, pd); + }catch(ClassNotFoundException eee){ + Logger.getLogger("org.codelutin.buix.WidgetManager") + .log(Level.WARNING, "Erreur durant le chargement du delegate", eee); + } + } + }catch(Exception eee){ + MessageDialog.error("Erreur durant le chargement", "Erreur durant la lecture du fichier d'encoder: "+url, eee); + } + } + + public void setDelegate(Encoder encoder){ + for(Iterator i=delegateMap.keySet().iterator(); i.hasNext();){ + Class clazz = (Class)i.next(); + PersistenceDelegate pd = (PersistenceDelegate)delegateMap.get(clazz); + encoder.setPersistenceDelegate(clazz, pd); + } + } + + /** * Methode pour charger les widgets issus du fichier xml */ public void loadWidget(URL url){ @@ -152,6 +186,9 @@ }else if (file.endsWith("-widgets.xml")){ System.out.println("url : "+url); loadWidget(url); + }else if (file.endsWith("-encoders.xml")){ + System.out.println("url : "+url); + loadEncoderDelegate(url); } } }catch(Exception eee){