Forums : Divers, vos projets, le site...

Aller à la discussion :  Plus récente Plus ancienne

Aller à la page :  1 2

# Comment agencer une interface ? Tabs ou Toolbar ?

Envoyé par : Raphael

Date : 14/09/2006 17:18

Bonjour, je débute en XUL et j'adore ce langage et ce qu'il permet de faire. Je viens juste de faire mon premier Hello World et j'aimerais attaquer un projet plus amibitieux...

Mes 2 terrains de recherche actuels auraient besoin de quelques conseils :

  1. Mon interface

Idéalement, mon interface doit avoir 2 ou 3 aspects... et je ne sais pas comment la coder : Avec des tabs ? C'est ce qui serait le plus proche de la logique structurelle mais je n'aime pas beaucoup l'ergonomie... Ainsi, je me demande s'il serait possible de simuler des Tabs avec des boutons ou mieux des boutons de Toolbar... car je préfère nettement l'ergonomie et la beauté au survol, et la possibilité de mettre une image.

Seulement, avec des Tabs, je pense que je saurais comment le coder mais avec des boutons qui changeraient l'affichage de la fenêtre, comment faire ? Comment coder vous une grosse interface ? faites-vous des inclusions de fichiers .xul pour séparer un peu le travail à faire ? Ou bien coder vous tout et appliquez-vous une technique de cache ? Je viens de voir qu'on pouvait totalement cacher un élément ? Quelle technique est à privillégier ? Chargement de divers fichiers selon clics ? Technique de cache-cache en modifiant l'atrribut de certains éléments pour les cacher ? Serait-il possible que vous me montriez juste un début de technique ?

  1. Mes données utilisateurs

S'il y a bien une chose que j'adore dans XUL en dehors de sa portabilité, c'est sa facilité de multi-skins et de multi-langues... J'aimerais donc savoir comment modifier la langue et faire pointer mon application sur la nouvelle langue. Il doit falloir sauvegarder ces infos utilisateurs quelques part... comment faire ? avec un fichier .rdf ? Du RDF, je ne connais que les flux RSS 1.0 qui sont très ressemblants... comment fait-on pour y sauvegarder et lire des données utilisateurs ? Et si vous n'utilisez pas du RDF, utilisez-vous SQLite3 qui semble être le futur format de stockage pour Firefox ? Ou bien s'il n'y a vraiment pas beaucoup d'infos, utilisez-vous un autre moyen ?

Voilà, j'espère que mes questions ne vous paraitront pas trop absurdes... Je décortique jour et nuit des applications XUl comme SQLite Manager ou Textree qui m'apprennent beaucoup, mais je suis mathématicien de formation et il est parfois difficile de comprendre certains scripts ^^"

Merci d'avance pour votre aide =)

# Re: Comment agencer une interface ? Tabs ou Toolbar ?

Envoyé par : laurentj

Date : 16/09/2006 15:37

Si tu veux un fonctionnement "logique" similaire utilise des tabs. Tu peux toujours aprés ajouter des images, changer l'apparence des onglets etc.. (CSS !)

évite de recoder un fonctionnement qui existe déjà. Tu y gagnera en temps, mais aussi en accessiblité etc..

Pour le reste : lire le tuto, tu y trouveras des réponses à nombre de tes questions..

# Re: Comment agencer une interface ? Tabs ou Toolbar ?

Envoyé par : Raphael

Date : 17/09/2006 13:52

Ok, merci pour ton conseil, je vais donc sûrement utiliser des Tabs.

J'allais poser une autre question mais finalement une 12° relecture du Tutorial .pdf m'a donné la réponse ^^

# Re: Comment agencer une interface ? Tabs ou Toolbar ?

Envoyé par : thefab

Date : 22/09/2006 01:17

J'aimerais donc savoir comment modifier la langue et faire pointer mon application sur la nouvelle langue.

Comment modifier la langue

Il doit falloir sauvegarder ces infos utilisateurs quelques part.

Les préférences utilisateur s'enregistrent via nsIPrefService (dans un fichier RDF mais tu n'as pas à manipuler du RDF)

# Re: Comment agencer une interface ? Tabs ou Toolbar ?

Envoyé par : Raphael

Date : 22/09/2006 07:29

J'avais déjà vu ce post pour changer la langue, mais je pensais que ça ne s'appliquait que pour une extension Firefox puisqu'il parle de s'enregistrer dans le chrome. Et comme j'utilise XULRunner, je pensais que la méthode n'était pas la même. Faut croire que si... tu me diras, j'aurais pu essayer, il est vrai... ^^"

Il y a un truc que je ne saisie pas trop concernant tout ce qui touche à la sauvegarde des préférences comme les langues, les skins ou autres préférences... En fait, XULRunner inclue tout ce qu'il faut pour sauver des préférences ? C'est ça ?

Est-ce qu'il suffit de lui dire "sauve-moi le tableau" :

Choix interface => 'advanced'
Choix skin => 'default'
Préférence à l'ouverture => 'module recherche'

Ca suffit ? Et ensuite on n'a plus qu'à récupérer ces variables à l'ouverture de l'appli ? c'est à ça que sert nslPrefService ? Sur la page donnée, je ne trouve pas d'exemple concernant l'écriture et la lecture de données l'utilisant, y-a-t-il un endroit où je pourrais trouver un tel code pour m'en inspirer ?

Merci.

# Re: Comment agencer une interface ? Tabs ou Toolbar ?

Envoyé par : laurentj

Date : 22/09/2006 13:30

Oui. En gros : XulRunner = Firefox mais sans son interface. Donc tu y retrouves la majeure partie de son API.

# Re: Comment agencer une interface ? Tabs ou Toolbar ?

Envoyé par : Raphael

Date : 23/09/2006 16:14

Bonjour, j'ai un souci concernant le changement de langue et d'ailleurs plus généralement j'ai vraiment du mal à comprendre comment marchent ces préférences utilisateurs ? Mon logiciel devrait permettre à plusieurs utilisateurs de l'utiliser dans la configuration qu'il veut (avec sécu par mot de passe si possible), je suppose que je dois pouvoir utiliser XULRunner pour ça non ? Mais je ne saisie pas comment et où sont stockés les préf ? dans user.js ? Je ne trouve pas ce fichier... Est-ce que c'est stocké dans XUlRunner ? Dans ce cas, est-ce qui si plusieurs applis. tournent avec XULRunner, elles auraient toutes la même langue, le même skin ?

Voici mes fichiers :

prefs.xul

<?xml version="1.0" encoding="utf-8" ?>
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
<?xml-stylesheet href="chrome://ydm/skin/default.css"  type="text/css"?>

<!DOCTYPE window SYSTEM "chrome://ydm/locale/ydm.dtd">

<window
id="prefs"
title="&prefs.title;"
orient="vertical"
 xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">

<script src="chrome://ydm/content/prefs.js" />

<toolbox>
	<toolbar id="prefs-toolbar">
		<toolbarbutton id="prefs-tb-main" oncommand="viewPrefsMain();" label="&prefs.main;" orient="vertical" />
		<spacer width="10" />
		<toolbarbutton id="prefs-tb-users" oncommand="viewPrefsUsers();" label="&prefs.users;" orient="vertical" />
		<spacer width="10" />
		<toolbarbutton id="prefs-tb-languages" oncommand="viewPrefsLanguages();" label="&prefs.languages;" orient="vertical" />
		<spacer width="10" />
		<toolbarbutton id="prefs-tb-skins" oncommand="viewPrefsSkins();" label="&prefs.skins;" orient="vertical" />
	</toolbar>
</toolbox>
<groupbox id="prefs-gbox-main" hidden="false" flex="1">
	<caption label="&prefs.main;" />
</groupbox>
<groupbox id="prefs-gbox-users" hidden="true" flex="1">
	<caption label="&prefs.users;" />
</groupbox>
<groupbox id="prefs-gbox-languages" hidden="true" flex="1">
	<caption label="&prefs.languages;" />
	<button label="Mettre en US" oncommand="changeLanguage();"/>
</groupbox>
<groupbox id="prefs-gbox-skins" hidden="true" flex="1">
	<caption label="&prefs.skins;" />
</groupbox>

</window>

prefs.js

...
function viewPrefsSkins()
{
document.getElementById('prefs-tb-main').removeAttribute('disabled');
document.getElementById('prefs-tb-users').removeAttribute('disabled');
document.getElementById('prefs-tb-languages').removeAttribute('disabled');
document.getElementById('prefs-tb-skins').setAttribute('disabled','true');

document.getElementById('prefs-gbox-main').setAttribute('hidden','true');
document.getElementById('prefs-gbox-users').setAttribute('hidden','true');
document.getElementById('prefs-gbox-languages').setAttribute('hidden','true');
document.getElementById('prefs-gbox-skins').removeAttribute('hidden');
}

function changeLanguage()
{
var CC = Components.classes;
var Ci = Components.interfaces;

var prfs =  CC["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefBranch);
prfs.setCharPref("general.useragent.locale", "en-US");

var prop = CC["@mozilla.org/file/directory_service;1"].getService(Ci.nsIProperties);
var drct = prop.get("PrefD", Ci.nsIFile);
			
var file = CC["@mozilla.org/file/local;1"].createInstance();
file.QueryInterface(Ci.nsILocalFile);
	
file.initWithPath(drct.path);
file.appendRelativePath("user.js");
		
var prfr = CC["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefService);
prfr.savePrefFile(file);
}

J'ai bien mes fichier dtd dans fr-FR et en-US... et rien ne se passe quand je presse le bouton pour passer en US, même après avoir redémarré (j'utilise XUlRunner1.9a1)

Dans l'idéal, je voudrais pouvoir mettre un menulist ou des radioboutons pour lister les langues disponibles et la langue à appliquer...

Quelqu'un saurait-il m'aider dans cette compréhension des données utilisateurs ? Car je ne trouve pas d'infos concluantes à me mettre sous la dent =/

Merci.

__EDIT : J'ai réussi à le faire marcher, en fait il fallait ajouter une ligne dans chrome.manifest et maintenant c'est bon... mais question :

Comment peut-on prendre une variable en paramètre pour ma fonction changeLanguage() pour faire un changeLanguage(en-US) par exemple et comment modifier le code en conséquence ? Je ne maitrise pas trop le JS...__

# Re: Comment agencer une interface ? Tabs ou Toolbar ?

Envoyé par : Raphael

Date : 24/09/2006 09:58

Désolé pour le double post, mais mon précédent commence à être encombré... Je suis parvenu à faire un script pour changer la langue de mon application mais je pêche un peu par inexpérience dans la finition :

prefs.xul

<listbox id="languageSelector" flex="1" >
  <listitem label="en-US"/>
  <listitem label="fr-FR"/>
</listbox>
<button label="Change Language" oncommand="changeLanguage();"/>

prefs.js

function changeLanguage()
{
var CC = Components.classes;
var Ci = Components.interfaces;
var lng = document.getElementById('languageSelector').selectedItem.label;

var prfs = CC["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefBranch);
prfs.setCharPref("general.useragent.locale", lng);

var prop = CC["@mozilla.org/file/directory_service;1"].getService(Ci.nsIProperties);
var drct = prop.get("PrefD", Ci.nsIFile);
			
var file = CC["@mozilla.org/file/local;1"].createInstance();
file.QueryInterface(Ci.nsILocalFile);
	
file.initWithPath(drct.path);
file.appendRelativePath("user.js");
		
var prfr = CC["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefService);
prfr.savePrefFile(file);
}

Avec ça, j'arrive à changer la langue donc c'est déjà pas mal... Mais je voudrais fignoler :

  • Comment metre le focus par défaut sur la valeur de la langue en cours ? Comment récupérer cette variable et l'appliquer à mon listbox ?
  • Comment insérer des images (petits drapeaux) dans un listbox ? Est-ce possible ? J'ai essayé avec un richlistbox mais déjà les images sont étirées et ensuite mon code ne marche plus...

Et plus généralement, comment fait-on pour sauvegarder et lire des infos utilisateurs stockées ? De la même manière ? Est-ce que c'est le même code sauf cette ligne qui changerait :

prfs.setCharPref("general.useragent.locale", lng);

Est-ce que c'est cette ligne qui correspond à mes données utilsateurs ? Puis-je sauver des infos en réutilisant le même code avec par exemple :

prfs.setCharPref("general.interface", "advanced");

Est-ce juste ? Et puis surtout, comment récupérer et lire ces données une fois stockées ?

Merci d'avance et encore désolé de vous poser des questions qui doivent vous sembler évidentes, mais pour moi malgré les recherches entreprises, je ne trouve pas la solution...

# Re: Comment agencer une interface ? Tabs ou Toolbar ?

Envoyé par : guillaume

Date : 23/03/2007 10:50

Bonjour. J'ai le même souci que toi : as tu trouvé la solution ?

Merci d'avance.

# Re: Comment agencer une interface ? Tabs ou Toolbar ?

Envoyé par : Paul Rouget

Date : 23/03/2007 14:10

C'est moi ou le thread devient complètement HS ?

Aller à la page :  1 2

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.