Index: topia/src/java/org/codelutin/topia/ui/Style.java diff -u /dev/null topia/src/java/org/codelutin/topia/ui/Style.java:1.1 --- /dev/null Fri Oct 8 13:08:01 2004 +++ topia/src/java/org/codelutin/topia/ui/Style.java Fri Oct 8 13:07:56 2004 @@ -0,0 +1,197 @@ +/* *##% + * Copyright (C) 2002, 2003 Code Lutin, Cédric Pineau, + Benjamin Poussin + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + *##%*/ + +/* * + * Style.java + * + * Created: 7 oct. 2004 + * + * @author Benjamin Poussin + * @version $Revision: 1.1 $ + * + * Mise a jour: $Date: 2004/10/08 13:07:56 $ + * par : $Author: bpoussin $ + */ + +package org.codelutin.topia.ui; + +import java.beans.Statement; +import java.io.Reader; +import java.lang.reflect.Field; +import java.util.HashMap; +import java.util.logging.Level; +import java.util.logging.Logger; +import org.codelutin.util.StringUtil; + +/** +* Cette classe permet de définir des styles qui pourront-être appliqués +* à des composants. +* Lorsque l'on appelle la méthode apply, pour chaque règle de style on +* récupère les composants respectants le selecteur. Pour chaque composant +* trouvé, on applique le style en appelant apply de la classe Type. +*/ +public class Style { // Style + + // FIXME trouver une structure pour conserver les styles definis + // Il faut conserver le selecteur, le type et la valeur + // Il faut aussi que les selecteurs soit rangés de façon hiérarchique + // pour que l'application des styles ne pose pas de problème. Le plus + // précis doit gagner + // Donc soit le selecteur est la cle mais on risque d'appliquer plusieurs + // des styles differents au meme composant + // ou bien on utilise le style comme cle et on applique sur les différents + // selecteur dans l'ordre ou on les trouves du plus precis au moins precis + // on appliquant le style à un composant que si on a pas encore appliqué + // ce style + + /** + * Charge des styles a partir d'un flux, on peut appeler plusieurs fois + * cette methode pour charger plusieurs fichiers de styles + */ + public void load(Reader styles){ + // TODO + } + + /** + * ajoute un style + * @param selector le selecteur qui permet de chosir sur quoi appliquer le + * style + * @param type le type de la propriété à modifier + * @param value la valeur de la propriété à modifier + */ + public void addStyle(String selector, Type type, Object value){ + // FIXME à implanter + } + + /** + * ajoute un style + * @param selector le selecteur qui permet de chosir sur quoi appliquer le + * style + * @param type le type de la propriété à modifier, si le type n'est + * pas retrouvé on admet alors que type est le nom d'une propriété de + * l'objet sélectionné. + * @param value la valeur de la propriété à modifier + */ + public void addStyle(String selector, String type, Object value){ + Type realType = (Type)allType.get(type.toLowerCase()); + if(realType != null){ + realType = new Type("set" + StringUtil.capitalize(type)); + } + addStyle(selector, realType, value); + } + + /** + * Applique sur le sujet tous les styles précédemment enregistré, soit + * par un {@link #addStyle} ou un {@link #load}. + * @param subject l'objet sur lequel il faut appliquer le style + * la plupart du temps subject est un Container Swing. qui permet d'accèder + * à tout un arbre de composant. + */ + public void apply(Object subject){ + // FIXME à implanter + } + + + static protected HashMap allType = new HashMap(); + + /** + * Lecture de tous les styles disponibles. Les styles sont trouvé par + * introspection de la classe. Ils sont tous des champs de class Type + * le nom du style est calculé a partir du nom du champs. + * BACKGROUND_COLOR devient comme nom de style background-color + */ + static { + // permet d'enregistrer automatiquement tous les styles de la classe + Field [] fields = Style.class.getDeclaredFields(); + for(int i=0; i + * @version $Revision: 1.1 $ + * + * Mise a jour: $Date: 2004/10/08 13:07:56 $ + * par : $Author: bpoussin $ + */ + +package org.codelutin.topia.ui; + +import java.io.Reader; + +/** +* Cette classe permet de créer une interface graphique par la lecture d'un +* fichier de description d'interface en XML. +*/ +public class SuixEngin { // SuixEngin + + /** + * Permet de charger un fichier .suix + */ + public void load(Reader ui){ + // FIXME a implanter + } + + /** + * Permet de modifier le style à appliquer a l'interface graphique. + * L'interface graphique doit déjà être chargée pour appeler cette méthode. + */ + public void setStyle(Style style){ + // FIXME a implanter + } + + /** + * Permet d'ajouter un objet de callback. L'interface graphique doit déjà + * être chargée pour appeler cette méthode. + */ + public void addCallback(Object callbacks){ + // FIXME a implanter + } + + /** + * Permet de modifier la vu que le développeur à du SuixEngin + * plutot que d'utiliser la méthode get pour recuperer les objets et + * ainsi être contraint de caster les objets qu'il recupere en ce qu'ils + * sont reellement, il peut utiliser les méthodes défini sur l'interface + * passé en argument. Un proxy est alors créer pour géré cette interface + * et faire les appels sur le SuixEngin. + * Par exemple si dans le fichier .suix, on à un widget Button ayant + * l'id monButton, l'interface aura alors une méthode getMonButton():button + * Le proxy utilisera le nom de la methode pour récupéré l'id de l'objet + * à récupérer. Il le demandera alors au SuixEngin et le retournera + * comme résultat de l'appel de la méthode. + * @param userInterface la class de l'interface qui permettra une + * utilisation plus simple du SuixEngin + */ + public Object setUserInterface(Class userInterface){ + // FIXME a implanter + return null; + } + + /** + * Permet de récupérer un objet par son id + * @param id l'id de l'objet à récupérer + * @return l'objet demandé, ou null si l'id n'est pas retrouvé + */ + public Object get(String id){ + // FIXME a implanter + return null; + } + +} // SuixEngin +