IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SWT/JFace Java Discussion :

[StyleRange] Récupérer les valeurs start et length d'origine


Sujet :

SWT/JFace Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur/Modérateur
    Avatar de Laurent.B
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2004
    Messages
    3 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 3 468
    Par défaut [StyleRange] Récupérer les valeurs start et length d'origine
    Bonjour,

    J'ai un texte que j'injecte dans un StyledText et auquel j'applique différents StyleRange au niveau par exemple de titres.

    Je comptais sur le fait que les StyleRange que j'instancie puissent me restituer des valeurs start et length utiles, au moment où par exemple l'utilisateur saisit un caractère dans le StyledText.

    Lorsque je fais ceci dans la méthode verifyText() du VerifyListener de mon StyleText :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    StyleRange styleRange = myStyledText.getStyleRangeAtOffset(event.start);
    Le StyleRange renvoyé contient bien les bonnes informations sur le style du texte mais en ce qui concerne les valeurs start et length, celles-ci ne sont pas exploitables puisqu'elles contiennent un start égal à event.start et une length de 1.

    Je m'attendais à ce que l'objet StyleRange renvoyé soit celui que j'ai instancié moi au départ, qui comportait des valeurs start et length bien précises mais ce n'est pas le cas.

    Donc, soit il me manque quelque chose pour que ça puisse être le cas, soit ce n'est pas fait du tout pour ça.

    Ma question est donc de savoir si quelqu'un saurait m'indiquer un moyen efficace pour récupérer les bonnes valeurs start et length du StyleRange ?

    Je sais qu'une portion de texte peut avoir différents StyleRange qui lui ont été appliqués successivement mais néanmoins, en admettant qu'il n'y en ait qu'un seul possible, est-ce faisable avec une méthode spécifique ? Pour le moment, je n'ai rien trouvé et les autres méthodes sur les StyleRange ne conviennent pas non plus.

    Je développe à partir d'une version 3.4.1 d'Eclipse.

    Merci d'avance pour votre aide.
    Responsable FAQ Eclipse | Maintiens et développe un des logiciels destinés aux rédacteurs sur developpez.com
    Gardons toujours à l'esprit que le forum constitue une base documentaire, dont l'utilité et la qualité dépendent du soin apporté à nos questions et nos réponses. Soyons polis, précis (dans le titre et dans le corps des questions), concis, constructifs et faisons de notre mieux pour respecter la langue française et sa grammaire. Merci pour nous (les modérateurs) mais aussi et surtout, merci pour vous.
    Problème solutionné => je vais au bas de la page et je clique sur le bouton (qui suite à mise à jour du forum, a légèrement changé d'aspect).

  2. #2
    Membre Expert
    Avatar de Gueritarish
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2007
    Messages
    1 800
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 800
    Par défaut
    Salut Laurent,

    Après investigation dans le code, quand tu fais un getStyleRangeAtOffset(), un StyleRange sera initialisé avec le start que tu lui donnes et une longueur de 1. C'est l'API qui est comme ça.
    Tu pourrais nous indiquer ce que tu souhaites faire?
    Si c'est "juste" appliquer le StyleRange qui est à proximité de l'endroit sur lequel tu travailles, tu peux utiliser un ExtendedModifyListener...
    Dis nous en plus, on verra comment faire

    Voilà, à+
    Gueritarish

  3. #3
    Rédacteur/Modérateur
    Avatar de Laurent.B
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2004
    Messages
    3 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 3 468
    Par défaut
    Citation Envoyé par Gueritarish Voir le message
    Tu pourrais nous indiquer ce que tu souhaites faire?
    Si c'est "juste" appliquer le StyleRange qui est à proximité de l'endroit sur lequel tu travailles, tu peux utiliser un ExtendedModifyListener...
    Je travaille sur un éditeur WYSIWYG.

    Donc dans un onglet j'ai l'éditeur XML standard pour rédiger du texte structuré avec des balises proches du HTML mais néanmoins non compatibles, et dans un autre onglet j'ai mon StyledText qui est censé être le reflet WYSIWYG du fichier XML. C'est-à-dire sans aucune balise XML et mis en forme de façon visuelle, sans pour autant être ce que donnera le rendu final (après divers autres traitements de transformation).

    Voilà, donc comme le StyledText doit servir d'éditeur, je cherche à synchroniser la saisie de l'utilisateur avec le fichier XML de manière réactive et non pas uniquement au moment où l'on bascule d'un onglet à l'autre.
    Si j'ai choisis cette option, c'est tout simplement parce que je ne veux pas que l'utilisateur attende potentiellement trop longtemps lors de la transition.

    C'est pour ça que j'avais espéré me baser sur les StyleRange et qu'au moment de la saisie utilisateur, je sache à quel StyleRange (et donc quel point de départ et taille) celle-ci se réfère. Car en étendant le StyleRange, je fais déjà en sorte de conserver et restituer un certain contexte qui me permet de me synchroniser avec le XML...

    J'utilise déjà le ExtendedModifyListener pour appliquer le même style à ce qui est ajouté, par rapport à ce qui existe déjà à l'endroit où c'est inséré.

    Voilà, donc ça m'aurait aidé si les StyleRange étaient bien valorisés, a posteriori, au niveau de la partie 'Range' mais s'il n'y a pas de moyen simple de la retrouver, ce n'est pas grave, je trouverais un moyen pour retomber sur mes pattes. Je voulais juste éviter de réinventer la roue si elle existe déjà

    Merci en tous cas.
    D'autres suggestions ?
    Responsable FAQ Eclipse | Maintiens et développe un des logiciels destinés aux rédacteurs sur developpez.com
    Gardons toujours à l'esprit que le forum constitue une base documentaire, dont l'utilité et la qualité dépendent du soin apporté à nos questions et nos réponses. Soyons polis, précis (dans le titre et dans le corps des questions), concis, constructifs et faisons de notre mieux pour respecter la langue française et sa grammaire. Merci pour nous (les modérateurs) mais aussi et surtout, merci pour vous.
    Problème solutionné => je vais au bas de la page et je clique sur le bouton (qui suite à mise à jour du forum, a légèrement changé d'aspect).

  4. #4
    Membre Expert
    Avatar de Gueritarish
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2007
    Messages
    1 800
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 800
    Par défaut
    Et bien la "seule" méthode (à mon avis) qui te permette de récupérer tes StyleRange comme il faut, c'est la méthode getStyleRanges() (sans attribut). Après, il s'agit juste de faire un parcours de tableau avec l'offset que tu as dans ton évènement (à comparer avec le start du StyleRange). C'est du O(n) dans le pire des cas.
    Je ne sais pas si tu les as vu, mais tu as 2 articles intéressants sur le StyleText:

  5. #5
    Rédacteur/Modérateur
    Avatar de Laurent.B
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2004
    Messages
    3 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 3 468
    Par défaut
    Citation Envoyé par Gueritarish Voir le message
    Et bien la "seule" méthode (à mon avis) qui te permette de récupérer tes StyleRange comme il faut, c'est la méthode getStyleRanges() (sans attribut). Après, il s'agit juste de faire un parcours de tableau avec l'offset que tu as dans ton évènement (à comparer avec le start du StyleRange). C'est du O(n) dans le pire des cas.
    Hé bien en fait, c'est effectivement ce que je fais mais je ne vais pas le laisser comme ça car il ne faudrait pas que le temps à trouver l'élément soit dépendant de son emplacement au sein de la liste. Bien évidemment, il faudrait passer par une map pour éviter cela mais le problème ensuite est de la conserver à jour... Donc, comme de toute façon les StyleRange ne sont pas réellement la panacée (étant donné qu'on peut les superposer), je pense que je vais gérer ça autrement.

    Citation Envoyé par Gueritarish Voir le message
    Je ne sais pas si tu les as vu, mais tu as 2 articles intéressants sur le StyleText
    Effectivement, je suis déjà tombé sur le premier mais pas sur le deuxième je crois. Merci, je vais y jeter un coup d'oeil !
    Responsable FAQ Eclipse | Maintiens et développe un des logiciels destinés aux rédacteurs sur developpez.com
    Gardons toujours à l'esprit que le forum constitue une base documentaire, dont l'utilité et la qualité dépendent du soin apporté à nos questions et nos réponses. Soyons polis, précis (dans le titre et dans le corps des questions), concis, constructifs et faisons de notre mieux pour respecter la langue française et sa grammaire. Merci pour nous (les modérateurs) mais aussi et surtout, merci pour vous.
    Problème solutionné => je vais au bas de la page et je clique sur le bouton (qui suite à mise à jour du forum, a légèrement changé d'aspect).

Discussions similaires

  1. DBGrid récupérer les valeurs de l'enregistrement courant
    Par bob_sapp dans le forum Bases de données
    Réponses: 5
    Dernier message: 06/09/2014, 07h56
  2. [MySQL] Récupérer les valeurs définies dans un champ ENUM
    Par Huntress dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 03/07/2010, 18h55
  3. récupérer les valeurs de checkbox
    Par liichiii dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 11/08/2005, 16h27
  4. [FB] récupérer les valeurs pas défaut
    Par Emmanuel Lecoester dans le forum SQL
    Réponses: 1
    Dernier message: 05/01/2005, 14h37
  5. [Couleur] Récupérer les valeurs R,V,B et L,U,V ?
    Par M4v3rick dans le forum C++Builder
    Réponses: 4
    Dernier message: 25/01/2004, 03h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo