Forums : Xul, Xbl, JS...

Aller à la discussion :  Plus récente Plus ancienne

# Problème avec stack

Envoyé par : cokinou

Date : 27/04/2009 17:37

Bonjour,

Je cherche a mettre un petit bouton (toolbarbutton) dans le coin en haut à droite d'une boite (box) dans laquelle il y a pleins de choses (label, button...). Sachant que mon bouton doit être au-dessus du reste mais sans perturber le positionnement des autres éléments.

J'ai commencé mes tests en utilisant CSS comme je le fais en HTML (via les propriétés position, right, top, z-index....)... Malheureusement rien ne fonctionnait.

En cherchant sur le net, j'ai découvert la balise stack qui fait exactement ce que je veux.... sauf..... que je n'arrive pas à positionner mon petit bouton sur la droite.

Sur ce tuto : https://developer.mozilla.org/En/XUL_Tut(..) on voit comment aligner en haut et à gauche mais je ne vois pas comment faire pour aligner sur la droite... (seul les propriétés left et top existe :-( ). J'ai essayé de mettre la direction à "rtl" mais ca change rien non plus :-(

Vous auriez pas une idée ?

Merci d'avance

PS: voici un exemple tout simple, je cherche à aligner en haut à droite mon toolbarbutton :-(

<stack>
   <vbox flex="1">
      <label value="label 1" />
      <label value="label 2" />
      <label value="label 3" />
      <button label="bouton" />
   </vbox>
   <toolbarbutton top="0" label="petit" />
</stack>

# Re: Problème avec stack

Envoyé par : laurentj

Date : 28/04/2009 14:55

right="0"

Non ?

# Re: Problème avec stack

Envoyé par : cokinou

Date : 28/04/2009 15:06

laurentj a écrit:

right="0"

Non ?

Malheureusement, non :-( Comme indiqué dans le tuto, seul les propriétés top et left sont implémentés. Pourquoi ? C'est une bonne question et dont je ne vois pas du tout la réponse....

# Re: Problème avec stack

Envoyé par : mistervince

Date : 29/04/2009 09:49

il y a toujours le javascript, mais c'est un peu lourd même pour un seul élément.

left = stack.boxObject.width - button.boxObject.width

En plus, si ta stack peut être redimensionnée, ça pose problème. Bref, c'est loin d'être idéal,

# Re: Problème avec stack

Envoyé par : cokinou

Date : 29/04/2009 11:36

mistervince a écrit:

il y a toujours le javascript, mais c'est un peu
lourd même pour un seul élément.

left = stack.boxObject.width -
button.boxObject.width

En plus, si ta stack peut être redimensionnée, ça
pose problème. Bref, c'est loin d'être idéal,

C'est vrai que le javascript pourrait fonctionné, mais ma fenêtre qui contient mon stack étant redimensionnable, il faudrait qu'à chaque fois que la fenêtre est redimensionné je recalcule la valeur de left.... Et sachant que je peux avoir un gros nombre de stack de la même forme dans ma fenêtre, ça peut vite devenir complexe et très lourd pour recalculer toutes les valeurs des différents left....

En tout cas, ça à le mérite de fonctionner donc c'est déjà une avancée :-) Merci ;-)

Personne d'autre n'a d'idée ?

# Re: Problème avec stack

Envoyé par : mistervince

Date : 29/04/2009 15:37

re

J'ai trouvé une solution qui semble satisfaisante en utilisant du html à la place du <stack/>. En tous cas, ça te permettra peut-être de continuer à avancer ;-).

<html:div style="position: relative;">
    <vbox style="width: 100%"><!--le flex ne marche pas ici-->
       <label value="label 1" />
       <label value="label 2" />
       <label value="label 3" />
       <button label="bouton" />
   </vbox>
   <html:div style="position: absolute;top: 0px;right: 0px;">
       <toolbarbutton label="petit"/>
   </html:div>
</html:div>

# Re: Problème avec stack

Envoyé par : laurentj

Date : 30/04/2009 12:27

ou plus simplement encore, mettre le bouton dans une box et on positionne ce bouton en haut à droite de cette box.

 
 <stack flex="1">
    <vbox flex="1">
       <label value="label 1" />
       <label value="label 2" />
       <label value="label 3" />
       <button label="bouton" />
    </vbox>
    <hbox flex="1" pack="end" align="start">
       <toolbarbutton label="petit" />
    </hbox>
 </stack>

# Re: Problème avec stack

Envoyé par : cokinou

Date : 30/04/2009 13:18

laurentj a écrit:

ou plus simplement encore, mettre le bouton dans
une box et on positionne ce bouton en haut à
droite de cette box.

 

<stack flex="1">
<vbox flex="1">
<label value="label 1" />
<label value="label 2" />
<label value="label 3" />
<button label="bouton" />
</vbox>
<hbox flex="1" pack="end" align="start">
<toolbarbutton label="petit" />
</hbox>
</stack>

Effectivement, visuellement cette méthode fonctionne bien mais.... essaye d'appuyer sur le bouton :-) La deuxième box étant au-dessus des label 1, label 2, label 3 et bouton, il est alors impossible d'interagir avec les éléments de la première box.

J'ai testé la méthode en utilisant du html au lieu de stack, et ca fait péter tout mes styles.... donc je continue sur ce chemin pour essayer de voir si je peux garder mes styles en utilisant du html... à suivre....

# Re: Problème avec stack

Envoyé par : laurentj

Date : 30/04/2009 15:06

Ah oui j'ai pas pensé à cliquer :-)

# Re: Problème avec stack

Envoyé par : cokinou

Date : 30/04/2009 16:08

J'y suis arrivé....

En partant de la solution via du html, puis repassage au xul des balises mais avec des styles se rapprochant du html.... Bref, un petit bout de code expliquera mieux que les mots, voilà le résultat :

<box style="display:block; position:relative;">
    <box class="icongroup-tools" style="position:absolute; top:0px; right:0px;">
        <toolbarbutton label="petit" />
    </box>
    <vbox>
        <label value="label 1" />
        <label value="label 2" />
        <label value="label 3" />
        <button label="bouton" />
    </vbox>
</box>

Grand merci à tous de m'avoir aidé

En plus, en bidouillant mon code pour que ça fonctionne, je me suis aperçu que j'avais pleins de box inutile qui me compliquaient énormément la tâche (surtout pour les styles).... en les supprimant ça va beaucoup mieux.... Donc 2 fois merci !!!

Il n'est plus possible de poster des messages dans ce forum.


Copyright © 2003-2013 association xulfr, 2013-2016 Laurent Jouanneau - Informations légales.

Mozilla® est une marque déposée de la fondation Mozilla.
Mozilla.org™, Firefox™, Thunderbird™, Mozilla Suite™ et XUL™ sont des marques de la fondation Mozilla.