2010-04-09 6 views
1

Est-ce que gwt a un analyseur intégré pour convertir des chaînes à base de css en constructions java?GWT CSS String Parser

IE Je suis intéressé par écrit mon propre widget qui prend par exemple hauteur/largeur:

public class MyWidget extends Composite{ 

    private double width; 
    private Style.Unit widthUnit; 
    private double height; 
    private Style.Unit heightUnit; 

    /** 
    * @width - width of my widget in CSS dimensions (ie. "10px", "1em" ...) 
    * @height - height of my widget in CSS dimensions (ie. "10px", "1em" ...) 
    */ 
    public MyWidget(String width, String height){ 
    // Parse out strings and set dimensions/units 
    } 
} 

Je pourrais facilement faire quelques regex à ce sujet mais je pensais que je verrais s'il y avait une sorte de mécanisme construit pour cela, je détesterais réinventer ...

Aussi, j'ai bien sûr pensé à accepter simplement double width, Style.Unit widthUnit dans le constructeur, mais setWidth de UiObject prend une chaîne CSS, donc je dois encore faire quelques La corde se muant, quoique dans l'autre sens. Idéalement, j'aurais 2 constructeurs pour réaliser les deux possibilités avec un mécanisme simple pour analyser correctement les cordes/dimensions et unités.

EDIT:

oublié de mentionner la raison que je voudrais analyser ces valeurs:

Je suis en train d'écrire un panneau de défilement simple (pensez iphone nav) donc quand un l'utilisateur clique sur un bouton, un nouvel 'élément' défile à partir de la droite.

Sur le backend ce serait:
1) Fetch nouveau rouleau article
2) Prolonger wrapper de défilement pour accompagner nouvel élément (c'est là que j'ai besoin des largeurs réelles)
2) Annexer au point wrapper de défilement
3) Animer l'enveloppe de défilement (en faisant glisser la largeur de 1 élément) pour exposer l'élément nouvellement ajouté à la section visible de l'habillage de panneau

La raison pour laquelle j'ai besoin de largeurs d'origine est parce que je souhaite étendre le panneau de défilement de la largeur de l'article ajouté à celui-ci. Si je me fais juste des cordes, je ne peux pas dire exactement setWidth(currentWidth + itemWidth)

Fondamentalement, je suis en train d'imiter JQuery Tools Scroller

Répondre

3

GWT utilise actuellement Flûte traversière pour analyser CSS, mais il y a une discussion à migrer vers CSS Parser (http://cssparser.sourceforge.net/). Vous pouvez directement utiliser un de ces analyseurs. MAIS, pour le cas d'utilisation que vous mentionnez - je ne pense pas que vous ayez besoin de quelque chose d'aussi lourd. En réalité, GWT n'analyse pas les chaînes de largeur et de hauteur, il les transmet juste aux navigateurs DOM et ensuite le navigateur l'évalue correctement. Tu devrais faire pareil. En d'autres termes, votre API prend juste une chaîne de caractères. L'appelant peut passer des ems ou des px ou des pourcentages. Votre API n'est pas concernée, car elle va simplement la pousser vers le navigateur pour la comprendre.

+0

+1 c'est correct. Les méthodes 'setWidth()' prennent une chaîne, qui peut être n'importe quoi: http://google-web-toolkit.googlecode.com/svn/javadoc/2.0/com/google/gwt/user/client/ui/UIObject.html #setWidth (java.lang.String) –

+0

vérifier mon édition, je devais mieux expliquer pourquoi cela est nécessaire pour moi – brad