Author: dandre
Date: Wed Sep 25 23:22:23 2013
New Revision: 4586
Log:
more dialog box refactoring
Modified:
trunk/AncestrisCore/core.report/src/genj/report/Report.java
trunk/AncestrisCore/core.report/src/genj/report/ReportView.java
trunk/AncestrisCore/core/src/ancestris/util/swing/DialogManager.java
trunk/AncestrisCore/core/src/genj/option/PropertyOption.java
trunk/AncestrisCore/core/src/genj/util/swing/DialogHelper.java
trunk/AncestrisCore/core/src/genj/view/ScreenshotAction.java
trunk/AncestrisCore/core/src/genj/view/SettingsAction.java
trunk/AncestrisCore/modules.beans/src/genj/edit/beans/MediaBean.java
trunk/AncestrisCore/modules.beans/src/genj/edit/beans/XRefBean.java
trunk/AncestrisCore/modules.editors.gedcom/src/genj/edit/AdvancedEditor.java
trunk/AncestrisCore/modules.editors.gedcom/src/genj/edit/actions/AbstractChange.java
trunk/AncestrisCore/modules.editors.gedcom/src/genj/edit/actions/EditEvent.java
trunk/AncestrisExtensions/CommonAncestor/src/ancestris/modules/commonAncestor/PreviewView.java
Modified: trunk/AncestrisCore/core.report/src/genj/report/Report.java
==============================================================================
--- trunk/AncestrisCore/core.report/src/genj/report/Report.java (original)
+++ trunk/AncestrisCore/core.report/src/genj/report/Report.java Wed Sep 25
23:22:23 2013
@@ -24,6 +24,7 @@
import ancestris.core.TextOptions;
import ancestris.core.actions.AbstractAncestrisAction;
import ancestris.core.resources.Images;
+import ancestris.util.swing.DialogManager;
import genj.common.SelectEntityWidget;
import genj.gedcom.Entity;
import genj.gedcom.Gedcom;
@@ -507,8 +508,12 @@
// show to user and check for non-ok
OptionsWidget widget = new OptionsWidget(title, os);
- int rc = DialogHelper.openDialog(getName(), DialogHelper.QUESTION_MESSAGE,
widget, AbstractAncestrisAction.okCancel(), owner);
- if (rc!=0)
+ Object rc = DialogManager.create(getName(), widget)
+ .setOptionType(DialogManager.OK_CANCEL_OPTION)
+ .setDialogId("report.optionsfromuser")
+ .show();
+
+ if (rc!=DialogManager.OK_OPTION)
return false;
// save parameters
Modified: trunk/AncestrisCore/core.report/src/genj/report/ReportView.java
==============================================================================
--- trunk/AncestrisCore/core.report/src/genj/report/ReportView.java
(original)
+++ trunk/AncestrisCore/core.report/src/genj/report/ReportView.java Wed Sep
25 23:22:23 2013
@@ -22,12 +22,14 @@
import ancestris.core.actions.AbstractAncestrisAction;
import ancestris.modules.document.view.HyperLinkTextDocumentView;
import ancestris.modules.document.view.WidgetDocumentView;
+import ancestris.util.swing.DialogManager;
import genj.common.ContextListWidget;
import genj.fo.Format;
import genj.fo.FormatOptionsWidget;
import genj.gedcom.Context;
import genj.gedcom.Entity;
import genj.gedcom.Gedcom;
+import genj.gedcom.Property;
import genj.util.Registry;
import genj.util.Resources;
import genj.util.swing.DialogHelper;
@@ -56,7 +58,7 @@
public class ReportView extends View {
/* package */
- static Logger LOG = Logger.getLogger("genj.report");
+ static final Logger LOG = Logger.getLogger("genj.report");
/** statics */
private final static ImageIcon imgStart = new ImageIcon(ReportView.class,
"Start"),
imgStop = new ImageIcon(ReportView.class, "Stop");
@@ -179,6 +181,79 @@
}
}
+//
+//
+//
+// /**
+// * start a report
+// * XXX: will be moved to Report class
+// */
+// public static void runReport(final Report report, Object context) {
+// Gedcom gedcom=null;
+// if (context instanceof Gedcom)
+// gedcom = (Gedcom)context;
+// if (context instanceof Property){
+// gedcom = ((Property)context).getGedcom();
+// }
+// if (gedcom == null)
+// return;
+// // create a new tab for this run
+// final HyperLinkTextDocumentView
+// output = new HyperLinkTextDocumentView(
+// new Context(gedcom),
+// report.getShortName(),
+// gedcom.getName() + ": " + report.getName());
+//
+// if (report.getStartMethod(context) == null) {
+// for (int i = 0; i < Gedcom.ENTITIES.length; i++) {
+// String tag = Gedcom.ENTITIES[i];
+// Entity sample = gedcom.getFirstEntity(tag);
+// if (sample != null && report.accepts(sample) != null) {
+//
+// // give the report a chance to name our dialog
+// String txt = report.accepts(sample.getClass());
+// if (txt == null) {
+// Gedcom.getName(tag);
+// }
+//
+// // ask user for context now
+// context = report.getEntityFromUser(txt, gedcom, tag);
+// if (context == null) {
+// return;
+// }
+// break;
+// }
+// }
+// }
+//
+// // check if appropriate
+// if (context == null || report.accepts(context) == null) {
+// DialogHelper.openDialog(report.getName(),
DialogHelper.ERROR_MESSAGE, RESOURCES.getString("report.noaccept"),
AbstractAncestrisAction.okOnly(), null);
+// return;
+// }
+//
+// // set report ui context
+// report.setOwner(null);
+//
+// // clear the current output and show coming
+// output.clear();
+// // kick it off
+// Runner.Callback cb = new Runner.Callback(){
+//
+// @Override
+// public void handleOutput(Report report, String s) {
+// output.add(s);
+// }
+//
+// @Override
+// public void handleResult(Report report, Object result) {
+// showResult(result);
+// }
+// };
+// new Thread(new Runner(gedcom, context, report, (Runner.Callback)
Spin.over(cb))).start();
+//
+// }
+//
/**
* Start a report after selection
*/
@@ -300,12 +375,16 @@
Action[] actions = AbstractAncestrisAction.okCancel();
FormatOptionsWidget options = new FormatOptionsWidget(doc,
foRegistry);
+//XXX: remove connect api and create a validatelistener
options.connect(actions[0]);
- int rc = DialogHelper.openDialog(title,
DialogHelper.QUESTION_MESSAGE, options, actions, this);
+ Object rc = DialogManager.create(title, options)
+ .setOptionType(DialogManager.OK_CANCEL_OPTION)
+ .setDialogId("report.optionsfromuser")
+ .show();
Format formatter = options.getFormat();
File file = options.getFile();
- if (rc != 0 || formatter.getFileExtension() == null || file ==
null) {
+ if (rc != DialogManager.OK_OPTION || formatter.getFileExtension()
== null || file == null) {
showResult(null);
return;
}
@@ -320,6 +399,7 @@
} catch (Throwable t) {
LOG.log(Level.WARNING, "formatting " + doc + " failed", t);
output.add("*** formatting " + doc + " failed");
+ //XXX: show a dialog to user if file creation failed
return;
}
@@ -345,7 +425,7 @@
toolbar.add(selector.getActionGroup());
// done
- }
+}
/**
* Action: STOP
Modified: trunk/AncestrisCore/core/src/ancestris/util/swing/DialogManager.java
==============================================================================
--- trunk/AncestrisCore/core/src/ancestris/util/swing/DialogManager.java
(original)
+++ trunk/AncestrisCore/core/src/ancestris/util/swing/DialogManager.java
Wed Sep 25 23:22:23 2013
@@ -29,6 +29,7 @@
public static final int OK_CANCEL_OPTION =
DialogDescriptor.OK_CANCEL_OPTION;
/** Return value if OK is chosen. */
public static final Object OK_OPTION = DialogDescriptor.OK_OPTION;
+ public static final Object CANCEL_OPTION = DialogDescriptor.CANCEL_OPTION;
private static DialogManager instance = null;
public static DialogManager getInstance() {
if (instance == null) {
@@ -46,51 +47,6 @@
//TODO: ce qui n'est pas fait: la possibilite de desactiver des boutons
par le caller
// p.ex via action[0].setEnable(...)
//
- /**
- *
- * @param title
- * param messageType
- * param content
- * param options
- * param dialogId Unique key to store dialog dimension. If null
- * no dimension persistence is done
- *
- * @return
- */
- //TODO: redesign API with less functions
- public Object show(String title, int messageType, JComponent content,int
optionType, String dialogId) {
- return show(title, messageType, content, optionType, null, dialogId);
- }
- public Object show(String title, int messageType, JComponent
content,Object[] options, String dialogId) {
- return show(title, messageType, content, 0, options, dialogId);
- }
- public Object show(String title, JComponent content,String dialogId) {
- return show(title, QUESTION_MESSAGE, content, 0,new Object[]{
DialogDescriptor.OK_OPTION}, dialogId);
- }
-
- private Object show(String title, int messageType, JComponent content,int
optionType, Object[] options, String dialogId) {
- DialogDescriptor d = new DialogDescriptor(content, title);
- d.setMessageType(messageType);
- if (options!=null)
- d.setOptions(options);
- final Dialog dialog = DialogDisplayer.getDefault().createDialog(d);
- // restore bounds
- if (dialogId != null) {
- final Registry registry = Registry.get(DialogManager.class);
- Dimension bounds = registry.get(dialogId+".dialog", (Dimension)
null);
- if (bounds != null) {
- Rectangle prev = dialog.getBounds();
- prev.grow((bounds.width - prev.width) / 2, (bounds.height -
prev.height) / 2);
- dialog.setBounds(prev);
- }
- dialog.setVisible(true);
- registry.put(dialogId+".dialog", dialog.getSize());
- } else {
- dialog.setVisible(true);
- }
-
- return d.getValue();
- }
public String show(String title, int messageType, String txt, String
value) {
NotifyDescriptor.InputLine d = new NotifyDescriptor.InputLine(txt,
title, NotifyDescriptor.OK_CANCEL_OPTION, messageType);
@@ -135,7 +91,13 @@
public ADialog setDialogId(String id) {
dialogId = id;
return this;
- }
+ }
+
+ public final ADialog setValid(boolean newValid) {
+ dd.setValid(newValid);
+ return this;
+ }
+
public Object show() {
final Dialog dialog = DialogDisplayer.getDefault().createDialog(dd);
// restore bounds
Modified: trunk/AncestrisCore/core/src/genj/option/PropertyOption.java
==============================================================================
--- trunk/AncestrisCore/core/src/genj/option/PropertyOption.java
(original)
+++ trunk/AncestrisCore/core/src/genj/option/PropertyOption.java Wed Sep
25 23:22:23 2013
@@ -22,6 +22,7 @@
import genj.util.Registry;
import genj.util.Resources;
import ancestris.core.actions.AbstractAncestrisAction;
+import ancestris.util.swing.DialogManager;
import genj.util.swing.DialogHelper;
import genj.util.swing.FileChooserWidget;
import genj.util.swing.FontChooser;
@@ -447,8 +448,11 @@
public void actionPerformed(ActionEvent e) {
Object value = option.getValue();
JComponent editor = getEditor(value);
- int rc = DialogHelper.openDialog(option.getName(),
DialogHelper.QUESTION_MESSAGE, new JScrollPane(editor),
AbstractAncestrisAction.okCancel(), e);
- if (rc==0) {
+ Object rc = DialogManager.create(option.getName(), new
JScrollPane(editor))
+ .setOptionType(DialogManager.OK_CANCEL_OPTION)
+ .setDialogId("property.option")
+ .show();
+ if (rc==DialogManager.OK_OPTION) {
option.setValue(getValue(editor));
// give any implementation a chance to re-set editing component
Modified: trunk/AncestrisCore/core/src/genj/util/swing/DialogHelper.java
==============================================================================
--- trunk/AncestrisCore/core/src/genj/util/swing/DialogHelper.java
(original)
+++ trunk/AncestrisCore/core/src/genj/util/swing/DialogHelper.java Wed Sep
25 23:22:23 2013
@@ -174,27 +174,16 @@
}
box.add(content[i]);
content[i].setAlignmentX(0F);
- }
- // delegate
- return openDialog(title, messageType, box, actions, source);
- }
- /**
- *
- * @param title
- * @ param messageType
- aram content
- * @param actions
- * @param source
- *
- * @return
- *
- * @deprecated use DialogManager
- */
- @Deprecated
- public static int openDialog(String title, int messageType, JComponent
content, Action[] actions, Object source) {
+ }
Object options[] = actions2options(actions);
- return getResult(DialogManager.getInstance().show(title, messageType,
content, options, "window"), options);
+
+ // delegate
+ return getResult(DialogManager.create(title, box)
+ .setMessageType(messageType)
+ .setOptions(options)
+ //XXX: .setDialogId("")
+ .show(),options);
}
public static Window getWindow(EventObject event) {
Modified: trunk/AncestrisCore/core/src/genj/view/ScreenshotAction.java
==============================================================================
--- trunk/AncestrisCore/core/src/genj/view/ScreenshotAction.java
(original)
+++ trunk/AncestrisCore/core/src/genj/view/ScreenshotAction.java Wed Sep
25 23:22:23 2013
@@ -22,6 +22,7 @@
import genj.renderer.RenderSelectionHintKey;
import genj.util.Resources;
import ancestris.core.actions.AbstractAncestrisAction;
+import ancestris.util.swing.DialogManager;
import genj.util.swing.DialogHelper;
import genj.util.swing.ImageIcon;
@@ -77,7 +78,10 @@
choices.add(viewport);
choices.add(all);
- if (0!=DialogHelper.openDialog(getTip(), DialogHelper.QUESTION_MESSAGE,
choices, AbstractAncestrisAction.okCancel(), e))
+ if (DialogManager.OK_OPTION != DialogManager.create(getTip(), choices)
+ .setOptionType(DialogManager.OK_CANCEL_OPTION)
+ .setDialogId("screenshot")
+ .show())
return;
if (viewport.isSelected())
Modified: trunk/AncestrisCore/core/src/genj/view/SettingsAction.java
==============================================================================
--- trunk/AncestrisCore/core/src/genj/view/SettingsAction.java (original)
+++ trunk/AncestrisCore/core/src/genj/view/SettingsAction.java Wed Sep 25
23:22:23 2013
@@ -21,6 +21,7 @@
import genj.util.Resources;
import ancestris.core.actions.AbstractAncestrisAction;
+import ancestris.util.swing.DialogManager;
import genj.util.swing.DialogHelper;
import java.awt.event.ActionEvent;
@@ -44,13 +45,9 @@
JComponent editor = getEditor();
- DialogHelper.openDialog(
- RESOURCES.getString("view.settings.tip"),
- DialogHelper.QUESTION_MESSAGE,
- editor,
- AbstractAncestrisAction.okOnly(),
- e);
-
+ DialogManager.create(RESOURCES.getString("view.settings.tip"),editor)
+ .setDialogId(this.getClass().getName()+".settings")
+ .show();
}
protected abstract JComponent getEditor();
Modified: trunk/AncestrisCore/modules.beans/src/genj/edit/beans/MediaBean.java
==============================================================================
--- trunk/AncestrisCore/modules.beans/src/genj/edit/beans/MediaBean.java
(original)
+++ trunk/AncestrisCore/modules.beans/src/genj/edit/beans/MediaBean.java
Wed Sep 25 23:22:23 2013
@@ -38,6 +38,7 @@
import genj.util.Origin;
import genj.util.Resources;
import ancestris.core.actions.AbstractAncestrisAction;
+import ancestris.util.swing.DialogManager;
import genj.util.swing.DialogHelper;
import genj.util.swing.FileChooserWidget;
import genj.util.swing.NestedBlockLayout;
@@ -357,7 +358,10 @@
validate();
- if (0!=DialogHelper.openDialog(getTip(), DialogHelper.QUESTION_MESSAGE,
options, AbstractAncestrisAction.andCancel(ok), MediaBean.this))
+ if (DialogManager.OK_OPTION != DialogManager.create(getTip(), options)
+ .setOptionType(DialogManager.OK_CANCEL_OPTION)
+ .setDialogId("mediabean.add")
+ .show())
return;
// tell thumbnail widget
@@ -398,7 +402,6 @@
private class Del extends AbstractAncestrisAction implements
PropertyChangeListener,ListSelectionListener {
private JList from;
- private AbstractAncestrisAction ok;
public Del() {
setImage(ThumbnailWidget.IMG_THUMBNAIL.getGrayedOut().getOverLayed(ancestris.core.resources.Images.imgDel));
@@ -455,11 +458,13 @@
options.add(new JLabel(RES.getString("file.del", "...")));
options.add(new JScrollPane(from));
- ok = AbstractAncestrisAction.ok();
from.addListSelectionListener(this);
- if (0!=DialogHelper.openDialog(getTip(), DialogHelper.QUESTION_MESSAGE,
options, AbstractAncestrisAction.andCancel(ok), e))
+ if (DialogManager.OK_OPTION != DialogManager.create(getTip(), options)
+ .setOptionType(DialogManager.OK_CANCEL_OPTION)
+ .setDialogId("mediabean.del")
+ .show())
return;
// remove props from source
@@ -484,7 +489,10 @@
}
public void valueChanged(ListSelectionEvent e) {
- ok.setEnabled(from.getSelectedIndices().length>0);
+
+//XXX: to enable ok button
ok.setEnabled(from.getSelectedIndices().length>0);
+ // Try DialogDescriptor.setValid
+ // See also http://wiki.netbeans.org/DevFaqDialogControlOKButton
}
}
Modified: trunk/AncestrisCore/modules.beans/src/genj/edit/beans/XRefBean.java
==============================================================================
--- trunk/AncestrisCore/modules.beans/src/genj/edit/beans/XRefBean.java
(original)
+++ trunk/AncestrisCore/modules.beans/src/genj/edit/beans/XRefBean.java Wed Sep
25 23:22:23 2013
@@ -29,6 +29,7 @@
import genj.gedcom.PropertyXRef;
import genj.gedcom.UnitOfWork;
import ancestris.core.actions.AbstractAncestrisAction;
+import ancestris.util.swing.DialogManager;
import ancestris.view.SelectionDispatcher;
import genj.util.swing.DialogHelper;
import genj.view.ViewContext;
@@ -78,12 +79,10 @@
return;
SelectEntityWidget select = new SelectEntityWidget(xref.getGedcom(),
xref.getTargetType(), null);
- if (0!=DialogHelper.openDialog(
- getText(),
- DialogHelper.QUESTION_MESSAGE,
- select,
- AbstractAncestrisAction.okCancel(),
- event))
+ if (DialogManager.OK_OPTION != DialogManager.create(getText(), select)
+ .setOptionType(DialogManager.OK_CANCEL_OPTION)
+ .setDialogId("xrefbean.swivel")
+ .show())
return;
final Entity newTarget = select.getSelection();
Modified:
trunk/AncestrisCore/modules.editors.gedcom/src/genj/edit/AdvancedEditor.java
==============================================================================
---
trunk/AncestrisCore/modules.editors.gedcom/src/genj/edit/AdvancedEditor.java
(original)
+++
trunk/AncestrisCore/modules.editors.gedcom/src/genj/edit/AdvancedEditor.java
Wed Sep 25 23:22:23 2013
@@ -26,6 +26,7 @@
import ancestris.core.actions.AncestrisActionProvider;
import ancestris.core.actions.SubMenuAction;
import ancestris.core.resources.Images;
+import ancestris.util.swing.DialogManager;
import ancestris.view.SelectionDispatcher;
import genj.common.SelectEntityWidget;
import genj.edit.beans.PropertyBean;
@@ -426,7 +427,11 @@
select.setSelection(gedcom.getEntity(REGISTRY.get("select." +
entity.getTag(), (String) null)));
// show it
- boolean cancel = 0 != DialogHelper.openDialog(getText(),
DialogHelper.WARNING_MESSAGE, panel, AbstractAncestrisAction.okCancel(),
AdvancedEditor.this);
+ boolean cancel = DialogManager.OK_OPTION !=
DialogManager.create(getText(), panel)
+ .setOptionType(DialogManager.OK_CANCEL_OPTION)
+ .setMessageType(DialogManager.WARNING_MESSAGE)
+ //.setDialogId("")
+ .show();
if (cancel) {
return;
}
Modified:
trunk/AncestrisCore/modules.editors.gedcom/src/genj/edit/actions/AbstractChange.java
==============================================================================
---
trunk/AncestrisCore/modules.editors.gedcom/src/genj/edit/actions/AbstractChange.java
(original)
+++
trunk/AncestrisCore/modules.editors.gedcom/src/genj/edit/actions/AbstractChange.java
Wed Sep 25 23:22:23 2013
@@ -22,6 +22,7 @@
import ancestris.core.actions.AbstractAncestrisAction;
import ancestris.core.actions.AbstractAncestrisContextAction;
import ancestris.core.resources.Images;
+import ancestris.util.swing.DialogManager;
import ancestris.view.SelectionDispatcher;
import genj.gedcom.Context;
import genj.gedcom.Gedcom;
@@ -104,10 +105,15 @@
new
AbstractAncestrisAction(resources.getString("confirm.proceed", getText())),
AbstractAncestrisAction.cancel()
};
+
+ String confirmButton = resources.getString("confirm.proceed",
getText());
// Recheck with the user
- int rc = DialogHelper.openDialog(getText(),
DialogHelper.QUESTION_MESSAGE, getDialogContent(), actions, event);
- if (rc != 0) {
+ Object rc = DialogManager.create(getText(), getDialogContent())
+ .setOptions(new
Object[]{confirmButton,DialogManager.CANCEL_OPTION})
+ //.setDialogId("")
+ .show();
+ if (rc != confirmButton) {
return;
}
}
Modified:
trunk/AncestrisCore/modules.editors.gedcom/src/genj/edit/actions/EditEvent.java
==============================================================================
---
trunk/AncestrisCore/modules.editors.gedcom/src/genj/edit/actions/EditEvent.java
(original)
+++
trunk/AncestrisCore/modules.editors.gedcom/src/genj/edit/actions/EditEvent.java
Wed Sep 25 23:22:23 2013
@@ -27,6 +27,7 @@
import genj.gedcom.UnitOfWork;
import genj.util.Resources;
import ancestris.core.actions.AbstractAncestrisAction;
+import ancestris.util.swing.DialogManager;
import genj.util.swing.DialogHelper;
import java.awt.event.ActionEvent;
@@ -63,14 +64,17 @@
final Action[] actions = AbstractAncestrisAction.okCancel();
actions[0].setEnabled(false);
-
+ //XXX: add change listener
panel.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
actions[0].setEnabled(panel.isCommittable());
}
});
- if (0==DialogHelper.openDialog(getText(), DialogHelper.QUESTION_MESSAGE,
panel, actions, e)) {
+ if (DialogManager.OK_OPTION == DialogManager.create(getText(),panel)
+ .setOptionType(DialogManager.OK_CANCEL_OPTION)
+ .setDialogId("edit.event")
+ .show()){
property.getGedcom().doMuteUnitOfWork(new UnitOfWork() {
public void perform(Gedcom gedcom) throws GedcomException {
panel.commit();
Modified:
trunk/AncestrisExtensions/CommonAncestor/src/ancestris/modules/commonAncestor/PreviewView.java
==============================================================================
---
trunk/AncestrisExtensions/CommonAncestor/src/ancestris/modules/commonAncestor/PreviewView.java
(original)
+++
trunk/AncestrisExtensions/CommonAncestor/src/ancestris/modules/commonAncestor/PreviewView.java
Wed Sep 25 23:22:23 2013
@@ -38,6 +38,7 @@
import javax.swing.text.BadLocationException;
import ancestris.modules.commonAncestor.graphics.IGraphicsRenderer;
+import ancestris.util.swing.DialogManager;
import ancestris.view.SelectionDispatcher;
import java.awt.Cursor;
import java.awt.event.MouseAdapter;
@@ -230,11 +231,15 @@
Action[] actions = AbstractAncestrisAction.okCancel();
FormatOptionsWidget options = new FormatOptionsWidget(doc,
foRegistry);
options.connect(actions[0]);
+ //XXX: will have to reenable ok button listener
- int rc = DialogHelper.openDialog(title,
DialogHelper.QUESTION_MESSAGE, options, actions, this);
+ Object rc = DialogManager.create(title, options)
+ .setOptionType(DialogManager.OK_CANCEL_OPTION)
+ .setDialogId("common.preview")
+ .show();
Format formatter = options.getFormat();
File file = options.getFile();
- if (rc != 0 || formatter.getFileExtension() == null || file ==
null) {
+ if (rc != DialogManager.OK_OPTION || formatter.getFileExtension()
== null || file == null) {
showResult(null);
return;
}
---------------------------------------------------------------------
Site Web Ancestris : http://www.ancestris.org
<*> Pour vous desinscrire de cette liste, envoyez un mail a :
[email protected]
<*> Pour obtenir de l'aide sur les commandes de la liste :
[email protected]
Pour obtenir tous les messages lies a ce fil de discussion, cliquez sur le
lien ci-dessous, cela ouvrira votre logiciel de messagerie. Il vous suffira
d'envoyer le message :
[email protected]