]> git.lyx.org Git - features.git/commitdiff
New citation popup from Angus
authorJean-Marc Lasgouttes <lasgouttes@lyx.org>
Wed, 7 Jun 2000 08:53:40 +0000 (08:53 +0000)
committerJean-Marc Lasgouttes <lasgouttes@lyx.org>
Wed, 7 Jun 2000 08:53:40 +0000 (08:53 +0000)
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@800 a592a061-630c-0410-9148-cb99ea01b6c8

25 files changed:
ChangeLog
forms/bibforms.fd
forms/cite.fd [new file with mode: 0644]
forms/makefile
po/ChangeLog
po/fr.po
src/bibforms.h
src/bmtable.c
src/buffer.C
src/buffer.h
src/insets/Makefile.am
src/insets/insetbib.C
src/insets/insetbib.h
src/insets/insetcite.C [new file with mode: 0644]
src/insets/insetcite.h [new file with mode: 0644]
src/insets/insetcommand.C
src/insets/insetcommand.h
src/insets/insetinclude.C
src/insets/insetinclude.h
src/insets/insetindex.h
src/insets/insetlabel.C
src/lyx_gui_misc.C
src/lyxfunc.C
src/paragraph.C
src/text.C

index f170a67a82a87896522ba4bbf1f9b706c2560c7c..7ee0ccc3fd31ba5f3c8b64cddfee81d48b6f25af 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2000-06-06  Angus Leeming <a.leeming@ic.ac.uk>
+
+       * forms/cite.fd: new citation dialog
+
+       * src/insetcite.[Ch]: the new citation dialog is moved into
+       its own files.
+
+       * src/insetbib.C: InsetBibtex::getKeys() uses STL containers
+       (Dekel).
+
+       * src/insets/insetcommand.h: data members made private. 
+
 2000-06-06  Lars Gullik Bjønnes  <larsbj@lyx.org>
 
        * LyX 1.1.5 released
index d49de0882fe18fe652ed58f3eb33adcec4df865d..289c592d3e4b11637e5c6999e18914b9c070312f 100644 (file)
@@ -6,102 +6,6 @@ Internal Form Definition File
 Number of forms: 2
 Unit of measure: FL_COORD_PIXEL
 
-=============== FORM ===============
-Name: citation_form
-Width: 220
-Height: 130
-Number of Objects: 5
-
---------------------
-class: FL_BOX
-type: UP_BOX
-box: 0 0 220 130
-boxtype: FL_UP_BOX
-colors: FL_COL1 FL_COL1
-alignment: FL_ALIGN_CENTER
-style: FL_NORMAL_STYLE
-size: FL_DEFAULT_SIZE
-lcol: FL_BLACK
-label: 
-shortcut: 
-resize: FL_RESIZE_ALL
-gravity: FL_NoGravity FL_NoGravity
-name: 
-callback: 
-argument: 
-
---------------------
-class: FL_INPUT
-type: NORMAL_INPUT
-box: 80 10 130 30
-boxtype: FL_DOWN_BOX
-colors: FL_COL1 FL_MCOL
-alignment: FL_ALIGN_LEFT
-style: FL_NORMAL_STYLE
-size: FL_NORMAL_SIZE
-lcol: FL_BLACK
-label: Key:|#K
-shortcut:
-resize: FL_RESIZE_ALL
-gravity: FL_NoGravity FL_NoGravity
-name: key
-callback: 
-argument: 
-
---------------------
-class: FL_BUTTON
-type: RETURN_BUTTON
-box: 20 90 90 30
-boxtype: FL_UP_BOX
-colors: FL_COL1 FL_COL1
-alignment: FL_ALIGN_CENTER
-style: FL_NORMAL_STYLE
-size: FL_NORMAL_SIZE
-lcol: FL_BLACK
-label: OK
-shortcut: ^M
-resize: FL_RESIZE_ALL
-gravity: FL_NoGravity FL_NoGravity
-name: 
-callback: bibitem_cb
-argument: 1
-
---------------------
-class: FL_BUTTON
-type: NORMAL_BUTTON
-box: 120 90 90 30
-boxtype: FL_UP_BOX
-colors: FL_COL1 FL_COL1
-alignment: FL_ALIGN_CENTER
-style: FL_NORMAL_STYLE
-size: FL_NORMAL_SIZE
-lcol: FL_BLACK
-label: Cancel|^[
-shortcut:
-resize: FL_RESIZE_ALL
-gravity: FL_NoGravity FL_NoGravity
-name: 
-callback: bibitem_cb
-argument: 0
-
---------------------
-class: FL_INPUT
-type: NORMAL_INPUT
-box: 80 50 130 30
-boxtype: FL_DOWN_BOX
-colors: FL_COL1 FL_MCOL
-alignment: FL_ALIGN_LEFT
-style: FL_NORMAL_STYLE
-size: FL_NORMAL_SIZE
-lcol: FL_BLACK
-label: Remark:|#R
-shortcut:
-resize: FL_RESIZE_ALL
-gravity: FL_NoGravity FL_NoGravity
-name: label
-callback: 
-argument: 
-
 =============== FORM ===============
 Name: bibitem_form
 Width: 220
diff --git a/forms/cite.fd b/forms/cite.fd
new file mode 100644 (file)
index 0000000..e547a6d
--- /dev/null
@@ -0,0 +1,250 @@
+Magic: 13000
+
+Internal Form Definition File
+    (do not change)
+
+Number of forms: 1
+Unit of measure: FL_COORD_PIXEL
+
+=============== FORM ===============
+Name: citation_form
+Width: 440
+Height: 790
+Number of Objects: 13
+
+--------------------
+class: FL_BOX
+type: UP_BOX
+box: 0 0 440 790
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_BROWSER
+type: HOLD_BROWSER
+box: 20 40 170 370
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_TOP_LEFT
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: Inset keys
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_BROWSER
+type: HOLD_BROWSER
+box: 250 40 170 370
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_TOP_LEFT
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: Bibliography keys
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 200 40 40 40
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: @4->
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 200 90 40 40
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: @9+
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 200 140 40 40
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: @8->
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 200 190 40 40
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: @2->
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_BROWSER
+type: NORMAL_BROWSER
+box: 20 440 400 110
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_TOP_LEFT
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: Info
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_CHOICE
+type: NORMAL_CHOICE
+box: 160 570 130 30
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_BLACK
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: Citation style
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_INPUT
+type: NORMAL_INPUT
+box: 100 620 250 30
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: Text before
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_INPUT
+type: NORMAL_INPUT
+box: 100 660 250 30
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: Text after
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_BUTTON
+type: RETURN_BUTTON
+box: 190 730 110 40
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: OK
+shortcut: ^M
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 310 730 110 40
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: Cancel
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+==============================
+create_the_forms
index 5863ac8d96ac224c25bad1e3907174184b589a7b..85f06e9cd69a0b6b8ae83f3dddf7146784e245e0 100644 (file)
@@ -17,15 +17,15 @@ SHELL = /bin/sh
 # Various commands
 FDESIGN = fdesign
 
-SRCS = bullet_forms.fd credits_form.fd form1.fd \
+SRCS = bullet_forms.fd cite.fd credits_form.fd form1.fd \
        latexoptions.fd layout_forms.fd lyx.fd lyx_sendfax.fd math_forms.fd \
        print_form.fd sp_form.fd
 
-OBJS = bullet_forms.c credits_form.c form1.c \
+OBJS = bullet_forms.c cite.c credits_form.c form1.c \
        latexoptions.c layout_forms.c lyx.c lyx_sendfax.c math_forms.c \
        print_form.c sp_form.c
 
-COBJS = bullet_forms.C credits_form.C form1.C \
+COBJS = bullet_forms.C cite.C credits_form.C form1.C \
        latexoptions.C layout_forms.C lyx.C lyx_sendfax.C math_forms.C \
        print_form.C sp_form.C
 
index c69cbd7cbbdd2bd1da5747ae7a2825ff8276c0b7..dd4fa6534421d33a36f31d4c392233c6a18d0f2a 100644 (file)
@@ -1,3 +1,7 @@
+2000-06-06  Jean-Marc Lasgouttes  <Jean-Marc.Lasgouttes@inria.fr>
+
+       * fr.po: update from Emmanuel
+
 2000-06-06  Lars Gullik Bjønnes  <larsbj@lyx.org>
 
        * de.po: updated
index 678421812d5621472cb068addbf2555f3380d0bd..4d477215496034c867a0c4ec637e848829be1d3e 100644 (file)
--- a/po/fr.po
+++ b/po/fr.po
@@ -92,7 +92,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: LyX 1.1.4\n"
-"POT-Creation-Date: 2000-06-06 13:45+0200\n"
+"POT-Creation-Date: 2000-06-06 05:38+0200\n"
 "PO-Revision-Date: 2000-03-10 02:56+01:00\n"
 "Last-Translator:  Jean-Pierre Chrétien <chretien@cert.fr>\n"
 "Language-Team: lyxfr <http://www.bde.enseeiht.fr/~faucheo/lyxfr.html>\n"
@@ -254,7 +254,7 @@ msgstr "Erreur ! Impossible d'ouvrir le fichier temporaire : "
 
 #: src/BufferView2.C:61 src/BufferView2.C:71 src/buffer.C:3605
 #: src/bufferlist.C:411 src/lyx_cb.C:396 src/lyx_cb.C:759 src/lyx_cb.C:785
-#: src/lyx_sendfax_main.C:264 src/menus.C:2130
+#: src/lyx_sendfax_main.C:264 src/menus.C:2119
 msgid "Error!"
 msgstr "Erreur !"
 
@@ -682,6 +682,7 @@ msgstr ""
 "Copyright LyX 1995 par Matthias Ettrich,\n"
 "1995-2000 LyX Team"
 
+#Durectement recopié de http://www.linux-france.org/article/these/gpl.html
 #: src/credits_form.C:55
 msgid ""
 "This program is free software; you can redistribute it\n"
@@ -690,10 +691,11 @@ msgid ""
 "Foundation; either version 2 of the License, or\n"
 "(at your option) any later version."
 msgstr ""
-"Ce logiciel est un logiciel libre ; vous pouvez le redistribuer\n"
-"et/ou le modifier sous les termes de la licence GNU GPL\n"
-"telle qu'elle est publiée par la FSF (Fondation pour le logiciel libre),\n"
-"soit dans sa version n°2 soit dans une version ultérieure."
+"Ce programme est libre, vous pouvez le redistribuer\n"
+"et/ou le modifier selon les termes de la\n"
+"Licence Publique Générale GNU publiée\n"
+"par la Free Software Foundation \n"
+"(version 2 ou bien toute autre version ultérieure)."
 
 #: src/credits_form.C:64
 msgid ""
@@ -708,21 +710,32 @@ msgid ""
 "the Free Software Foundation, Inc.,\n"
 "675 Mass Ave, Cambridge, MA 02139, USA."
 msgstr ""
+"Ce programme est distribué car potentiellement utile,\n"
+"mais SANS AUCUNE GARANTIE, ni explicite ni implicite, \n"
+"y compris les garanties de commercialisation ou d'adaptation \n"
+"dans un but spécifique. Reportez-vous à la Licence Publique Générale GNU\n"
+"pour plus de détails.\n"
+"Vous devez avoir reçu une copie de la Licence Publique Générale GNU\n"
+" en même temps que ce programme ; si ce n'est pas le cas,\n"
+"écrivez à la Free Software Foundation, Inc., 59 Temple Place,\n"
+"Suite 330, Boston, MA 02111-1307, États-Unis."
+
 
 #: src/CutAndPaste.C:391
 msgid "Layout had to be changed from\n"
-msgstr ""
+msgstr "Le style de paragraphe a changé de\n"
 
 #: src/CutAndPaste.C:392 src/CutAndPaste.C:395
 #, fuzzy
 msgid " to "
-msgstr " de "
+msgstr " vers "
 
 #: src/CutAndPaste.C:394
 msgid ""
 "\n"
 "because of class conversion from\n"
-msgstr ""
+msgstr "\n"
+"car la conversion de la classe \n"
 
 # à revoir
 #: src/CutAndPaste.C:422 src/CutAndPaste.C:431 src/insets/insettext.C:1508
@@ -836,9 +849,9 @@ msgstr "Afficher Cadre|#F"
 msgid "Do Translations|#r"
 msgstr "Traduire|#r"
 
-#: src/form1.C:129 src/insets/form_graphics.C:73 src/menus.C:197
-#: src/menus.C:208 src/menus.C:345 src/menus.C:346 src/menus.C:347
-#: src/menus.C:420 src/menus.C:421 src/menus.C:422 src/sp_form.C:58
+#: src/form1.C:129 src/insets/form_graphics.C:73 src/menus.C:196
+#: src/menus.C:207 src/menus.C:344 src/menus.C:345 src/menus.C:346
+#: src/menus.C:419 src/menus.C:420 src/menus.C:421 src/sp_form.C:58
 msgid "Options"
 msgstr "Options"
 
@@ -1087,7 +1100,7 @@ msgstr ""
 msgid "Name"
 msgstr "Destinataire"
 
-#: src/insets/form_url.C:24 src/lyx.C:175
+#: src/insets/form_url.C:24 src/lyx.C:174
 msgid "Name|#N"
 msgstr "Destinataire|#N"
 
@@ -1229,8 +1242,8 @@ msgstr "Utiliser include|#i"
 
 #. launches dialog
 #: src/insets/insetinclude.C:114 src/lyx_cb.C:248 src/lyxfunc.C:2726
-#: src/lyxfunc.C:2816 src/lyxfunc.C:2876 src/lyxfunc.C:3020 src/menus.C:199
-#: src/menus.C:359 src/menus.C:360 src/menus.C:361
+#: src/lyxfunc.C:2816 src/lyxfunc.C:2876 src/lyxfunc.C:3020 src/menus.C:198
+#: src/menus.C:358 src/menus.C:359 src/menus.C:360
 msgid "Documents"
 msgstr ""
 
@@ -1277,7 +1290,7 @@ msgstr ""
 msgid "Opened note"
 msgstr "Insert ouvert"
 
-#: src/insets/insetinfo.C:210 src/insets/insetinfo.C:215 src/lyx.C:159
+#: src/insets/insetinfo.C:210 src/insets/insetinfo.C:215 src/lyx.C:158
 msgid "Close|#C^["
 msgstr "Fermer|#C^["
 
@@ -2786,19 +2799,19 @@ msgstr "Mise 
 msgid "Type|Tt#t"
 msgstr "Type :|#T"
 
-#: src/lyx.C:155
+#: src/lyx.C:154
 msgid "Update|#U"
 msgstr "Mise à jour|#U"
 
-#: src/lyx.C:163
+#: src/lyx.C:162
 msgid "Insert Reference|#I^M"
 msgstr "Insérer référence|#I^M"
 
-#: src/lyx.C:167
+#: src/lyx.C:166
 msgid "Insert Page Number|#P"
 msgstr "Insérer n° de page|#P"
 
-#: src/lyx.C:171
+#: src/lyx.C:170
 msgid "Go to Reference|#G"
 msgstr "Aller à la référence|#A"
 
@@ -2806,19 +2819,19 @@ msgstr "Aller 
 msgid "Sort keys|#S"
 msgstr "Tri des étiquettes|#S"
 
-#: src/lyx.C:182
+#: src/lyx.C:181
 msgid "Insert vReference|#V"
 msgstr "Insérer vRéférence|#V"
 
-#: src/lyx.C:186
+#: src/lyx.C:185
 msgid "Insert vPage Number|#N"
 msgstr "Insérer n° de vPage|#N"
 
-#: src/lyx.C:190
+#: src/lyx.C:189
 msgid "Insert Pretty Ref|#T"
 msgstr "Insérer Pretty Ref|#P"
 
-#: src/lyx.C:194
+#: src/lyx.C:193
 msgid "Go Back|#B"
 msgstr ""
 
@@ -3692,11 +3705,11 @@ msgstr "Le document est en lecture seule :"
 
 #: src/lyx_main.C:85
 msgid "Wrong command line option `"
-msgstr ""
+msgstr "Mauvaise option de ligne de commande"
 
 #: src/lyx_main.C:87
 msgid "'. Exiting."
-msgstr ""
+msgstr "'. Sortie du programme."
 
 #: src/lyx_main.C:209
 msgid "Warning: could not determine path of binary."
@@ -4136,86 +4149,86 @@ msgstr "Haut | Centre | Bas"
 msgid "Math Panel"
 msgstr "Palette mathématique"
 
-#: src/menus.C:183 src/menus.C:206 src/menus.C:247 src/menus.C:248
-#: src/menus.C:249 src/menus.C:406 src/menus.C:407 src/menus.C:408
+#: src/menus.C:182 src/menus.C:205 src/menus.C:246 src/menus.C:247
+#: src/menus.C:248 src/menus.C:405 src/menus.C:406 src/menus.C:407
 msgid "File"
 msgstr "Fichier"
 
-#: src/menus.C:185 src/menus.C:261 src/menus.C:262 src/menus.C:263
+#: src/menus.C:184 src/menus.C:260 src/menus.C:261 src/menus.C:262
 msgid "Edit"
 msgstr "Éditer"
 
-#: src/menus.C:187 src/menus.C:275 src/menus.C:276 src/menus.C:277
+#: src/menus.C:186 src/menus.C:274 src/menus.C:275 src/menus.C:276
 msgid "TOC"
 msgstr "Plan"
 
-#: src/menus.C:189 src/menus.C:289 src/menus.C:290 src/menus.C:291
+#: src/menus.C:188 src/menus.C:288 src/menus.C:289 src/menus.C:290
 msgid "Refs"
 msgstr "Refs"
 
 # revu
-#: src/menus.C:191 src/menus.C:303 src/menus.C:304 src/menus.C:305
+#: src/menus.C:190 src/menus.C:302 src/menus.C:303 src/menus.C:304
 msgid "Layout"
 msgstr "Format"
 
-#: src/menus.C:193 src/menus.C:317 src/menus.C:318 src/menus.C:319
+#: src/menus.C:192 src/menus.C:316 src/menus.C:317 src/menus.C:318
 msgid "Insert"
 msgstr "Insérer"
 
-#: src/menus.C:195 src/menus.C:331 src/menus.C:332 src/menus.C:333
+#: src/menus.C:194 src/menus.C:330 src/menus.C:331 src/menus.C:332
 msgid "Math"
 msgstr "Maths"
 
-#: src/menus.C:201 src/menus.C:210 src/menus.C:373 src/menus.C:374
-#: src/menus.C:375 src/menus.C:434 src/menus.C:435 src/menus.C:436
+#: src/menus.C:200 src/menus.C:209 src/menus.C:372 src/menus.C:373
+#: src/menus.C:374 src/menus.C:433 src/menus.C:434 src/menus.C:435
 msgid "Help"
 msgstr "Aide"
 
-#: src/menus.C:251 src/menus.C:410
+#: src/menus.C:250 src/menus.C:409
 msgid "MB|#F"
 msgstr ""
 
-#: src/menus.C:265
+#: src/menus.C:264
 msgid "MB|#E"
 msgstr ""
 
-#: src/menus.C:279
+#: src/menus.C:278
 msgid "MB|#T"
 msgstr ""
 
-#: src/menus.C:293
+#: src/menus.C:292
 msgid "MB|#R"
 msgstr ""
 
-#: src/menus.C:307
+#: src/menus.C:306
 msgid "MB|#L"
 msgstr "MB|#r"
 
-#: src/menus.C:321
+#: src/menus.C:320
 msgid "MB|#I"
 msgstr ""
 
-#: src/menus.C:335
+#: src/menus.C:334
 msgid "MB|#M"
 msgstr ""
 
-#: src/menus.C:349 src/menus.C:424
+#: src/menus.C:348 src/menus.C:423
 msgid "MB|#O"
 msgstr ""
 
-#: src/menus.C:363
+#: src/menus.C:362
 msgid "MB|#D"
 msgstr ""
 
-#: src/menus.C:377 src/menus.C:438
+#: src/menus.C:376 src/menus.C:437
 msgid "MB|#H"
 msgstr ""
 
-#: src/menus.C:480
+#: src/menus.C:479
 msgid "Screen Options"
 msgstr "Options d'affichage"
 
-#: src/menus.C:521
+#: src/menus.C:520
 msgid ""
 "Import%t|LaTeX...%x30|Ascii Text as Lines...%x31|Ascii Text as "
 "Paragraphs%x32|Noweb%x33|LinuxDoc%x34"
@@ -4223,27 +4236,27 @@ msgstr ""
 "Importer%t|LaTeX...%x30|Texte Ascii en lignes...%x31|Texte Ascii en "
 "paragraphes%x32|Noweb%x33"
 
-#: src/menus.C:528 src/menus.C:785
+#: src/menus.C:527 src/menus.C:784
 msgid "FIM|Ll#l#L"
 msgstr "FIT|Ll#l#L"
 
-#: src/menus.C:529 src/menus.C:786
+#: src/menus.C:528 src/menus.C:785
 msgid "FIM|Aa#a#A"
 msgstr "FIT|Aa#a#A"
 
-#: src/menus.C:530 src/menus.C:787
+#: src/menus.C:529 src/menus.C:786
 msgid "FIM|Pp#p#P"
 msgstr "FIT|Pp#p#P"
 
-#: src/menus.C:531 src/menus.C:788
+#: src/menus.C:530 src/menus.C:787
 msgid "FIM|Nn#n#N"
 msgstr "FIM|Nn#n#N"
 
-#: src/menus.C:532 src/menus.C:789
+#: src/menus.C:531 src/menus.C:788
 msgid "FIM|Dd#d#D"
 msgstr "FM|Dd#d#D"
 
-#: src/menus.C:541
+#: src/menus.C:540
 msgid ""
 "Export%t|as LaTeX...%x40|as DVI...%x41|as PostScript...%x42|as Ascii "
 "Text...%x43|as HTML...%x44|Custom...%x45"
@@ -4251,7 +4264,7 @@ msgstr ""
 "Exporter%t|en LaTeX...%x40|en DVI...%x41|en PostScript...%x42|en texte Ascii "
 "...%x43|en HTML...%x44|Personnalisé...%x45"
 
-#: src/menus.C:550
+#: src/menus.C:549
 msgid ""
 "Export%t|as LinuxDoc...%x40|as DVI...%x41|as PostScript...%x42|as Ascii "
 "Text...%x43|as HTML...%x44"
@@ -4259,7 +4272,7 @@ msgstr ""
 "Exporter%t|en LinuxDoc...%x40|en DVI...%x41|en PostScript...%x42|en texte "
 "Ascii...%x43"
 
-#: src/menus.C:558
+#: src/menus.C:557
 msgid ""
 "Export%t|as DocBook...%x40|as DVI...%x41|as PostScript...%x42|as Ascii "
 "Text...%x43|as HTML...%x44"
@@ -4267,32 +4280,32 @@ msgstr ""
 "Exporter%t|en DocBook...%x40|en DVI...%x41|en PostScript...%x42|en texte "
 "Ascii...%x43"
 
-#: src/menus.C:565
+#: src/menus.C:564
 msgid "FEX|Ll#l#L"
 msgstr ""
 
-#: src/menus.C:566
+#: src/menus.C:565
 msgid "FEX|Dd#d#D"
 msgstr ""
 
-#: src/menus.C:567
+#: src/menus.C:566
 msgid "FEX|Pp#p#P"
 msgstr ""
 
 # A comme Ascii
-#: src/menus.C:568
+#: src/menus.C:567
 msgid "FEX|Tt#t#T"
 msgstr "FEX|Aa#a#A"
 
-#: src/menus.C:569
+#: src/menus.C:568
 msgid "FEX|Hh#h#H"
 msgstr "EM|Xx#x#X"
 
-#: src/menus.C:572
+#: src/menus.C:571
 msgid "FEX|mM#m#M"
 msgstr "FEX|sS#s#S"
 
-#: src/menus.C:576
+#: src/menus.C:575
 msgid ""
 "New...|New from template...|Open...%l|Close|Save|Save As...|Revert to "
 "saved%l|View dvi|View PostScript|Update dvi|Update PostScript|Build "
@@ -4303,90 +4316,90 @@ msgstr ""
 "%l|Visualiser DVI|Visualiser PostScript|Mise à jour DVI|Mise à jour "
 "PostScript|Compiler programme%l|Imprimer...|Télécopie..."
 
-#: src/menus.C:591 src/menus.C:809
+#: src/menus.C:590 src/menus.C:808
 msgid "FM|Nn#n#N"
 msgstr ""
 
-#: src/menus.C:592 src/menus.C:810
+#: src/menus.C:591 src/menus.C:809
 msgid "FM|tT#t#T"
 msgstr "FM|mM#m#M"
 
-#: src/menus.C:593 src/menus.C:811
+#: src/menus.C:592 src/menus.C:810
 msgid "FM|Oo#o#O"
 msgstr ""
 
-#: src/menus.C:594
+#: src/menus.C:593
 msgid "FM|Cc#c#C"
 msgstr "FM|Ff#f#F"
 
-#: src/menus.C:595
+#: src/menus.C:594
 msgid "FM|Ss#s#S"
 msgstr "FM|Ee#e#E"
 
-#: src/menus.C:596
+#: src/menus.C:595
 msgid "FM|Aa#a#A"
 msgstr "FM|sS#s#S"
 
-#: src/menus.C:597
+#: src/menus.C:596
 msgid "FM|Rr#r#R"
 msgstr ""
 
-#: src/menus.C:598
+#: src/menus.C:597
 msgid "FM|dD#d#D"
 msgstr "FM|Dd#d#D"
 
-#: src/menus.C:599
+#: src/menus.C:598
 msgid "FM|wW#w#W"
 msgstr "FM|Pp#p#P"
 
-#: src/menus.C:600
+#: src/menus.C:599
 msgid "FM|vV#v#V"
 msgstr "FM|dD#d#D"
 
-#: src/menus.C:601
+#: src/menus.C:600
 msgid "FM|Uu#u#U"
 msgstr "FM|pP#p#P"
 
-#: src/menus.C:602
+#: src/menus.C:601
 msgid "FM|Bb#b#B"
 msgstr "FM|Cc#c#C"
 
-#: src/menus.C:603
+#: src/menus.C:602
 msgid "FM|Pp#p#P"
 msgstr "FM|Ii#i#I"
 
-#: src/menus.C:604
+#: src/menus.C:603
 msgid "FM|Ff#f#F"
 msgstr "FM|vV#v#V"
 
-#: src/menus.C:655
+#: src/menus.C:654
 #, no-c-format
 msgid "|Import%m"
 msgstr "|Importer%m"
 
-#: src/menus.C:657
+#: src/menus.C:656
 #, no-c-format
 msgid "|Export%m%l"
 msgstr "|Exporter%m%l"
 
-#: src/menus.C:659
+#: src/menus.C:658
 #, no-c-format
 msgid "|Exit%l"
 msgstr "|Quitter%l"
 
-#: src/menus.C:660 src/menus.C:812
+#: src/menus.C:659 src/menus.C:811
 msgid "FM|Ii#i#I"
 msgstr "FM|mM#m#M"
 
-#: src/menus.C:661
+#: src/menus.C:660
 msgid "FM|Ee#e#E"
 msgstr "FM|xX#x#X"
 
-#: src/menus.C:662 src/menus.C:813
+#: src/menus.C:661 src/menus.C:812
 msgid "FM|xX#x#X"
 msgstr "FM|Qq#q#Q"
 
-#: src/menus.C:778
+#: src/menus.C:777
 msgid ""
 "Import%t|LaTeX...%x15|Ascii Text as Lines...%x16|Ascii Text as "
 "Paragraphs...%x17|Noweb...%x18|LinuxDoc...%x19"
@@ -4394,12 +4407,12 @@ msgstr ""
 "Importer%t|LaTeX...%x15|Texte Ascii en lignes...%x16|Texte Ascii en "
 "paragraphes..%x17|Noweb...%x18"
 
-#: src/menus.C:803
+#: src/menus.C:802
 msgid "New...|New from template...|Open...%l|Import%m%l|Exit%l"
 msgstr ""
 "Nouveau...|Nouveau à partir d'un modèle...|Ouvrir...%l|Importer%m%l|Quitter%l"
 
-#: src/menus.C:893
+#: src/menus.C:892
 msgid ""
 "Floats & Insets%t|Open/Close%x21|Melt%x22|Open All Footnotes/Margin "
 "Notes%x23|Close All Footnotes/Margin Notes%x24|Open All "
@@ -4410,265 +4423,265 @@ msgstr ""
 "figures/tables%x25|Fermer toutes les figures/tables%x26%l|Effacer les "
 "erreurs%x27"
 
-#: src/menus.C:902
+#: src/menus.C:901
 msgid "EMF|Oo#o#O"
 msgstr ""
 
-#: src/menus.C:903
+#: src/menus.C:902
 msgid "EMF|Mm#m#M"
 msgstr ""
 
-#: src/menus.C:904
+#: src/menus.C:903
 msgid "EMF|Aa#a#A"
 msgstr ""
 
-#: src/menus.C:905
+#: src/menus.C:904
 msgid "EMF|Cc#c#C"
 msgstr ""
 
-#: src/menus.C:906
+#: src/menus.C:905
 msgid "EMF|Ff#f#F"
 msgstr ""
 
-#: src/menus.C:907
+#: src/menus.C:906
 msgid "EMF|Tt#t#T"
 msgstr ""
 
-#: src/menus.C:908
+#: src/menus.C:907
 msgid "EMF|Rr#r#R"
 msgstr ""
 
-#: src/menus.C:917 src/menus.C:1015 src/menus.C:1082
+#: src/menus.C:916 src/menus.C:1014 src/menus.C:1081
 msgid "Table%t"
 msgstr "Tableau%t"
 
-#: src/menus.C:924 src/menus.C:1018
+#: src/menus.C:923 src/menus.C:1017
 msgid "|Multicolumn%B%x44%l"
 msgstr "|Multicolonne%B%x44%l"
 
-#: src/menus.C:926 src/menus.C:1020
+#: src/menus.C:925 src/menus.C:1019
 msgid "|Multicolumn%b%x44%l"
 msgstr "|Multicolonne%b%x44%l"
 
-#: src/menus.C:927 src/menus.C:1021
+#: src/menus.C:926 src/menus.C:1020
 msgid "EMT|Mm#m#M"
 msgstr ""
 
-#: src/menus.C:934 src/menus.C:1024
+#: src/menus.C:933 src/menus.C:1023
 msgid "|Line Top%B%x36"
 msgstr "|Ligne Haute%B%x36"
 
-#: src/menus.C:936 src/menus.C:1026
+#: src/menus.C:935 src/menus.C:1025
 msgid "|Line Top%b%x36"
 msgstr "|Ligne haute%b%x36"
 
-#: src/menus.C:937 src/menus.C:1027
+#: src/menus.C:936 src/menus.C:1026
 msgid "EMT|Tt#t#T"
 msgstr "EMT|Hh#h#H"
 
-#: src/menus.C:944 src/menus.C:1030
+#: src/menus.C:943 src/menus.C:1029
 msgid "|Line Bottom%B%x37"
 msgstr "|Ligne basse%B%x37"
 
-#: src/menus.C:946 src/menus.C:1032
+#: src/menus.C:945 src/menus.C:1031
 msgid "|Line Bottom%b%x37"
 msgstr "|Ligne basse%b%x37"
 
-#: src/menus.C:947 src/menus.C:1033
+#: src/menus.C:946 src/menus.C:1032
 msgid "EMT|Bb#b#B"
 msgstr ""
 
-#: src/menus.C:954 src/menus.C:1036
+#: src/menus.C:953 src/menus.C:1035
 msgid "|Line Left%B%x38"
 msgstr "|Ligne gauche%B%x38"
 
-#: src/menus.C:956 src/menus.C:1038
+#: src/menus.C:955 src/menus.C:1037
 msgid "|Line Left%b%x38"
 msgstr "|Ligne gauche%b%x38"
 
-#: src/menus.C:957 src/menus.C:1039
+#: src/menus.C:956 src/menus.C:1038
 msgid "EMT|Ll#l#L"
 msgstr "EMT|Gg#g#G"
 
-#: src/menus.C:964 src/menus.C:1042
+#: src/menus.C:963 src/menus.C:1041
 msgid "|Line Right%B%x39%l"
 msgstr "|Ligne droite%B%x39%l"
 
-#: src/menus.C:966 src/menus.C:1044
+#: src/menus.C:965 src/menus.C:1043
 msgid "|Line Right%b%x39%l"
 msgstr "|Ligne droite%b%x39%l"
 
-#: src/menus.C:967 src/menus.C:1045
+#: src/menus.C:966 src/menus.C:1044
 msgid "EMT|Rr#r#R"
 msgstr "EMT|Dd#d#D"
 
-#: src/menus.C:976 src/menus.C:1049
+#: src/menus.C:975 src/menus.C:1048
 msgid "|Align Left%R%x40"
 msgstr "|Aligner à gauche%R%x40"
 
-#: src/menus.C:978 src/menus.C:1051
+#: src/menus.C:977 src/menus.C:1050
 msgid "|Align Left%r%x40"
 msgstr "|Aligner à gauche%r%x40"
 
-#: src/menus.C:979 src/menus.C:1052
+#: src/menus.C:978 src/menus.C:1051
 msgid "EMT|eE#e#E"
 msgstr "EMT|aA#a#A"
 
-#: src/menus.C:982 src/menus.C:1055
+#: src/menus.C:981 src/menus.C:1054
 msgid "|Align Right%R%x41"
 msgstr "|Aligner à droite%R%x41"
 
-#: src/menus.C:984 src/menus.C:1057
+#: src/menus.C:983 src/menus.C:1056
 msgid "|Align Right%r%x41"
 msgstr "|Aligner à droite%r%x41"
 
-#: src/menus.C:985 src/menus.C:1058
+#: src/menus.C:984 src/menus.C:1057
 msgid "EMT|iI#i#I"
 msgstr "EMT|oO#o#O"
 
-#: src/menus.C:988 src/menus.C:1061
+#: src/menus.C:987 src/menus.C:1060
 msgid "|Align Center%R%x42%l"
 msgstr "|Centrer%R%x42%l"
 
-#: src/menus.C:990 src/menus.C:1063
+#: src/menus.C:989 src/menus.C:1062
 msgid "|Align Center%r%x42%l"
 msgstr "|Centrer%r%x42%l"
 
-#: src/menus.C:991 src/menus.C:1064
+#: src/menus.C:990 src/menus.C:1063
 msgid "EMT|Cc#c#C"
 msgstr ""
 
-#: src/menus.C:994 src/menus.C:1067
+#: src/menus.C:993 src/menus.C:1066
 #, no-c-format
 msgid "|Append Row%x32"
 msgstr "|Ajouter Ligne%x32"
 
-#: src/menus.C:995 src/menus.C:1068
+#: src/menus.C:994 src/menus.C:1067
 msgid "EMT|oO#o#O"
 msgstr ""
 
-#: src/menus.C:997 src/menus.C:1070
+#: src/menus.C:996 src/menus.C:1069
 #, no-c-format
 msgid "|Append Column%x33%l"
 msgstr "|Ajouter colonne%x33%l"
 
-#: src/menus.C:998 src/menus.C:1071
+#: src/menus.C:997 src/menus.C:1070
 msgid "EMT|uU#u#U"
 msgstr ""
 
-#: src/menus.C:1000 src/menus.C:1073
+#: src/menus.C:999 src/menus.C:1072
 #, no-c-format
 msgid "|Delete Row%x34"
 msgstr "|Supprimer ligne%x34"
 
-#: src/menus.C:1001 src/menus.C:1074
+#: src/menus.C:1000 src/menus.C:1073
 msgid "EMT|wW#w#W"
 msgstr ""
 
-#: src/menus.C:1003 src/menus.C:1076
+#: src/menus.C:1002 src/menus.C:1075
 #, no-c-format
 msgid "|Delete Column%x35%l"
 msgstr "|Supprimer colonne%x35%l"
 
-#: src/menus.C:1004 src/menus.C:1077
+#: src/menus.C:1003 src/menus.C:1076
 msgid "EMT|nN#n#N"
 msgstr ""
 
-#: src/menus.C:1006 src/menus.C:1079
+#: src/menus.C:1005 src/menus.C:1078
 #, no-c-format
 msgid "|Delete Table%x43"
 msgstr "|Supprimer tableau%x43"
 
-#: src/menus.C:1007 src/menus.C:1080
+#: src/menus.C:1006 src/menus.C:1079
 msgid "EMT|Dd#d#D"
 msgstr ""
 
-#: src/menus.C:1084
+#: src/menus.C:1083
 #, no-c-format
 msgid "|Insert table%x31"
 msgstr "|Insérer tableau%x31"
 
-#: src/menus.C:1085
+#: src/menus.C:1084
 msgid "EMT|Ii#i#I"
 msgstr ""
 
-#: src/menus.C:1089
+#: src/menus.C:1088
 msgid "Version Control%t"
 msgstr "Contrôle de version%t"
 
-#: src/menus.C:1092
+#: src/menus.C:1091
 #, no-c-format
 msgid "|Register%d%x51"
 msgstr "|Initialiser le contrôle%d%x51"
 
 #. signifies that the file is not checked out
-#: src/menus.C:1096
+#: src/menus.C:1095
 #, no-c-format
 msgid "|Check In Changes%d%x52"
 msgstr "|Figer cette version%d%x52"
 
-#: src/menus.C:1098
+#: src/menus.C:1097
 #, no-c-format
 msgid "|Check Out for Edit%x53"
 msgstr "|Nouvelle version éditable%x53"
 
 #. signifies that the file is checked out
-#: src/menus.C:1102
+#: src/menus.C:1101
 #, no-c-format
 msgid "|Check In Changes%x52"
 msgstr "|Figer cette version%x52"
 
-#: src/menus.C:1104
+#: src/menus.C:1103
 #, no-c-format
 msgid "|Check Out for Edit%d%x53"
 msgstr "|Nouvelle version éditable%d%x53"
 
-#: src/menus.C:1107
+#: src/menus.C:1106
 #, no-c-format
 msgid "|Revert to last version%x54"
 msgstr "|Recharger la version précédente%x54"
 
-#: src/menus.C:1109
+#: src/menus.C:1108
 #, no-c-format
 msgid "|Undo last check in%x55"
 msgstr "|Annuler figer%x55"
 
-#: src/menus.C:1111
+#: src/menus.C:1110
 #, no-c-format
 msgid "|Show History%x56"
 msgstr "|Visualiser historique%x56"
 
-#: src/menus.C:1114
+#: src/menus.C:1113
 #, no-c-format
 msgid "|Register%x51"
 msgstr "|Initialiser le contrôle%x51"
 
 #. the shortcuts are not good.
-#: src/menus.C:1117
+#: src/menus.C:1116
 msgid "EMV|Rr#r#R"
 msgstr "EMV|Ii#i#I"
 
-#: src/menus.C:1118
+#: src/menus.C:1117
 msgid "EMV|Ii#i#I"
 msgstr "EMV|Ff#f#F"
 
-#: src/menus.C:1119
+#: src/menus.C:1118
 msgid "EMV|Oo#o#O"
 msgstr "EMV|Nn#n#N"
 
-#: src/menus.C:1120
+#: src/menus.C:1119
 msgid "EMV|lL#l#l"
 msgstr "EMV|Rr#r#R"
 
-#: src/menus.C:1121
+#: src/menus.C:1120
 msgid "EMV|Uu#u#U"
 msgstr "EMV|Aa#a#A"
 
-#: src/menus.C:1122
+#: src/menus.C:1121
 msgid "EMV|Hh#h#H"
 msgstr ""
 
-#: src/menus.C:1125
+#: src/menus.C:1124
 msgid ""
 "Undo|Redo %l|Cut|Copy|Paste%l|Find & Replace...|Go to Error|Go to "
 "Note|Floats & Insets%m|Table%m|Spellchecker....|Check TeX|Table of "
@@ -4682,124 +4695,124 @@ msgstr ""
 "TeX|Table des matières...%l|Contrôle de version%m%l|Examiner journal LaTeX "
 "log%l|Copier sélection en lignes|Copier sélection en paragraphes"
 
-#: src/menus.C:1147
+#: src/menus.C:1146
 msgid "EM|Uu#u#U"
 msgstr "EM|Aa#a#A"
 
-#: src/menus.C:1148
+#: src/menus.C:1147
 msgid "EM|Rr#r#R"
 msgstr ""
 
-#: src/menus.C:1149
+#: src/menus.C:1148
 msgid "EM|Cc#c#C"
 msgstr "EM|uU#u#U"
 
-#: src/menus.C:1150
+#: src/menus.C:1149
 msgid "EM|oO#o#O"
 msgstr "EM|pP#p#P"
 
-#: src/menus.C:1151
+#: src/menus.C:1150
 msgid "EM|Pp#p#P"
 msgstr "EM|lL#l#L"
 
-#: src/menus.C:1152
+#: src/menus.C:1151
 msgid "EM|Ff#f#F"
 msgstr "EM|Rr#r#R"
 
-#: src/menus.C:1153
+#: src/menus.C:1152
 msgid "EM|Ee#e#E"
 msgstr ""
 
-#: src/menus.C:1154
+#: src/menus.C:1153
 msgid "EM|Nn#n#N"
 msgstr ""
 
-#: src/menus.C:1155
+#: src/menus.C:1154
 msgid "EM|Ii#i#I"
 msgstr ""
 
 #. fl_setpup_shortcut(EditMenu, 10, scex(_("EM|Tt#t#T")));
-#: src/menus.C:1157
+#: src/menus.C:1156
 msgid "EM|Ss#s#S"
 msgstr "EM|Oo#o#O"
 
-#: src/menus.C:1158
+#: src/menus.C:1157
 msgid "EM|hH#h#H"
 msgstr "EM|Xx#x#X"
 
-#: src/menus.C:1159
+#: src/menus.C:1158
 msgid "EM|Tt#t#T"
 msgstr "EM|"
 
 #. fl_setpup_shortcut(EditMenu, 14, scex(_("EM|Ff#f#F")));
 #. fl_setpup_shortcut(EditMenu, 15, scex(_("EM|bB#b#B")));
 #. fl_setpup_shortcut(EditMenu, 16, scex(_("EM|mM#m#M")));
-#: src/menus.C:1163
+#: src/menus.C:1162
 msgid "EM|Vv#v#V"
 msgstr ""
 
-#: src/menus.C:1164
+#: src/menus.C:1163
 msgid "EM|wW#w#W"
 msgstr "EM|Jj#j#J"
 
-#: src/menus.C:1165
+#: src/menus.C:1164
 msgid "EM|Ll#l#L"
 msgstr ""
 
-#: src/menus.C:1166
+#: src/menus.C:1165
 msgid "EM|gG#g#G"
 msgstr ""
 
-#: src/menus.C:1366
+#: src/menus.C:1360
 #, no-c-format
 msgid "List of Figures%m"
 msgstr "Liste des figures%m"
 
-#: src/menus.C:1368
+#: src/menus.C:1362
 #, no-c-format
 msgid "List of Tables%m"
 msgstr "Liste des tableaux%m"
 
-#: src/menus.C:1370
+#: src/menus.C:1364
 #, no-c-format
 msgid "List of Algorithms%m"
 msgstr "Liste des algorithmes%m"
 
-#: src/menus.C:1503
+#: src/menus.C:1492
 #, no-c-format
 msgid "Insert Reference%m"
 msgstr "Insérer référence%m"
 
-#: src/menus.C:1505
+#: src/menus.C:1494
 #, no-c-format
 msgid "Insert Page Number%m"
 msgstr "Insérer n° de page%m"
 
-#: src/menus.C:1507
+#: src/menus.C:1496
 #, no-c-format
 msgid "Insert vref%m"
 msgstr "Insérer vref%m"
 
-#: src/menus.C:1509
+#: src/menus.C:1498
 #, no-c-format
 msgid "Insert vpageref%m"
 msgstr "Insérer vpageref%m"
 
-#: src/menus.C:1511
+#: src/menus.C:1500
 #, no-c-format
 msgid "Insert Pretty Ref%m"
 msgstr "Insérer Pretty Ref%m"
 
-#: src/menus.C:1513
+#: src/menus.C:1502
 #, no-c-format
 msgid "Goto Reference%m"
 msgstr "Aller à la reférence%m"
 
-#: src/menus.C:1527
+#: src/menus.C:1516
 msgid "Go Back"
 msgstr ""
 
-#: src/menus.C:1595
+#: src/menus.C:1584
 msgid ""
 "Character...|Paragraph...|Document...|Paper...|Table...|Quotes...%l|Emphasize"
 " Style%b|Noun Style%b|Bold Style%b|TeX Style%b%l|Change Environment "
@@ -4809,76 +4822,76 @@ msgstr ""
 "En évidence%b|Nom propre%b|Gras%b|TeX%b|Profondeur|Préambule "
 "LaTeX...%l|Début d'annexe%l|Enregistrer mise en page comme défaut"
 
-#: src/menus.C:1609
+#: src/menus.C:1598
 msgid "LM|Cc#c#C"
 msgstr ""
 
-#: src/menus.C:1610
+#: src/menus.C:1599
 msgid "LM|Pp#p#P"
 msgstr ""
 
-#: src/menus.C:1611
+#: src/menus.C:1600
 msgid "LM|Dd#d#D"
 msgstr ""
 
-#: src/menus.C:1612
+#: src/menus.C:1601
 msgid "LM|aA#a#A"
 msgstr ""
 
-#: src/menus.C:1613
+#: src/menus.C:1602
 msgid "LM|eE#e#E"
 msgstr "LM|Tt#t#T"
 
-#: src/menus.C:1614
+#: src/menus.C:1603
 msgid "LM|Qq#q#Q"
 msgstr "LM|uU#u#U"
 
-#: src/menus.C:1615
+#: src/menus.C:1604
 msgid "LM|mM#m#M"
 msgstr "LM|Ee#e#E"
 
-#: src/menus.C:1616
+#: src/menus.C:1605
 msgid "LM|Nn#n#N"
 msgstr "LM|Mm#m#M"
 
-#: src/menus.C:1617
+#: src/menus.C:1606
 msgid "LM|Bb#b#B"
 msgstr "LM|Gg#g#G"
 
-#: src/menus.C:1618
+#: src/menus.C:1607
 msgid "LM|Tt#t#T"
 msgstr ""
 
-#: src/menus.C:1619
+#: src/menus.C:1608
 msgid "LM|vV#v#V"
 msgstr "LM|fF#f#F"
 
-#: src/menus.C:1620
+#: src/menus.C:1609
 msgid "LM|Ll#l#L"
 msgstr ""
 
 # defuzzifié sans vérification
-#: src/menus.C:1621
+#: src/menus.C:1610
 msgid "LM|xX#x#X"
 msgstr "FM|Qq#q#Q"
 
-#: src/menus.C:1622
+#: src/menus.C:1611
 msgid "LM|Ss#s#S"
 msgstr "LM|Dd#d#D"
 
-#: src/menus.C:1688
+#: src/menus.C:1677
 msgid "Import ASCII file%t|As Lines%x41|As Paragraphs%x42"
 msgstr "Importer fichier Ascii%t|En lignes%x41|En paragraphes%x42"
 
-#: src/menus.C:1692
+#: src/menus.C:1681
 msgid "IMA|Ll#l#L"
 msgstr ""
 
-#: src/menus.C:1693
+#: src/menus.C:1682
 msgid "IMA|Pp#p#P"
 msgstr ""
 
-#: src/menus.C:1696
+#: src/menus.C:1685
 msgid ""
 "Lists & TOC%t|Table of Contents%x21|List of Figures%x22|List of "
 "Tables%x23|List of Algorithms%x24|Index List%x25|BibTeX Reference%x26"
@@ -4886,31 +4899,31 @@ msgstr ""
 "Listes & tables%t|Table des matières%x21|Liste des figures%x22|Liste des "
 "tableaux%x23|Liste des algorithmes%x24|Index%x25|Références BibTeX%x26"
 
-#: src/menus.C:1704
+#: src/menus.C:1693
 msgid "IMT|Cc#c#C"
 msgstr "IML|Mm#m#M"
 
-#: src/menus.C:1705
+#: src/menus.C:1694
 msgid "IMT|Ff#f#F"
 msgstr "IML|Ff#f#F"
 
-#: src/menus.C:1706
+#: src/menus.C:1695
 msgid "IMT|Tt#t#T"
 msgstr "IML|Tt#t#T"
 
-#: src/menus.C:1707
+#: src/menus.C:1696
 msgid "IMT|Aa#a#A"
 msgstr "IML|Aa#a#A"
 
-#: src/menus.C:1708
+#: src/menus.C:1697
 msgid "IMT|Ii#i#I"
 msgstr "IML|Ii#i#I"
 
-#: src/menus.C:1709
+#: src/menus.C:1698
 msgid "IMT|Bb#b#B"
 msgstr "IML|Bb#b#B"
 
-#: src/menus.C:1712
+#: src/menus.C:1701
 msgid ""
 "Floats%t|Figure Float%x71|Table Float%x72|Wide Figure Float%x73|Wide Table "
 "Float%l%x74|Algorithm Float%x75"
@@ -4919,27 +4932,27 @@ msgstr ""
 "flottante%x73|Grand tableau flottant%l%x74|Algorithme flottant%x75"
 
 # à revoir
-#: src/menus.C:1719
+#: src/menus.C:1708
 msgid "IMF|gG#g#G"
 msgstr "IM|Ff#f#F"
 
-#: src/menus.C:1720
+#: src/menus.C:1709
 msgid "IMF|Tt#t#T"
 msgstr "IMF|tT#t#T"
 
-#: src/menus.C:1721
+#: src/menus.C:1710
 msgid "IMF|Ww#w#W"
 msgstr "IMF|Ff#f#F"
 
-#: src/menus.C:1722
+#: src/menus.C:1711
 msgid "IMF|iI#i#I"
 msgstr "IMF|Tt#t#T"
 
-#: src/menus.C:1723
+#: src/menus.C:1712
 msgid "IMF|Aa#a#A"
 msgstr ""
 
-#: src/menus.C:1726
+#: src/menus.C:1715
 msgid ""
 "Special Character%t|HFill%x31|Hyphenation Point%x32|Protected "
 "Blank%x33|Linebreak%x34|Ellipsis (...)%x35|End of sentence "
@@ -4949,39 +4962,39 @@ msgstr ""
 "insécable%x33|Passage à la ligne%x34|Points de suspension (...)%x35|Point "
 "final%x36|Guillemets (\")%x37|Séparateur de menu%x38"
 
-#: src/menus.C:1736
+#: src/menus.C:1725
 msgid "IMS|Hh#h#H"
 msgstr ""
 
-#: src/menus.C:1737
+#: src/menus.C:1726
 msgid "IMS|Pp#p#P"
 msgstr "IMS|Cc#c#C"
 
-#: src/menus.C:1738
+#: src/menus.C:1727
 msgid "IMS|Bb#b#B"
 msgstr ""
 
-#: src/menus.C:1739
+#: src/menus.C:1728
 msgid "IMS|Ll#l#L"
 msgstr ""
 
-#: src/menus.C:1740
+#: src/menus.C:1729
 msgid "IMS|iI#i#I"
 msgstr "IMS|Ss#s#S"
 
-#: src/menus.C:1741
+#: src/menus.C:1730
 msgid "IMS|Ee#e#E"
 msgstr "IMS|Pp#p#P"
 
-#: src/menus.C:1742
+#: src/menus.C:1731
 msgid "IMS|Qq#q#Q"
 msgstr "IMS|Gg#g#G"
 
-#: src/menus.C:1743
+#: src/menus.C:1732
 msgid "IMS|Mm#m#M"
 msgstr "IMS|Mm#m#M"
 
-#: src/menus.C:1746
+#: src/menus.C:1735
 msgid ""
 "Figure...|Table...%l|Include File...|Import ASCII File%m|Insert LyX "
 "File...%l|Footnote|Margin Note|Floats%m%l|Lists & TOC%m%l|Special "
@@ -4994,79 +5007,79 @@ msgstr ""
 "croisée...|Citation bibliographique...|Entrée d'index...|Index du mot "
 "précédent"
 
-#: src/menus.C:1767
+#: src/menus.C:1756
 msgid "IM|gG#g#G"
 msgstr "IM|Ff#f#F"
 
-#: src/menus.C:1768
+#: src/menus.C:1757
 msgid "IM|bB#b#B"
 msgstr "IM|Tt#t#T"
 
-#: src/menus.C:1769
+#: src/menus.C:1758
 msgid "IM|cC#c#C"
 msgstr ""
 
-#: src/menus.C:1770
+#: src/menus.C:1759
 msgid "IM|Aa#a#A"
 msgstr ""
 
-#: src/menus.C:1771
+#: src/menus.C:1760
 msgid "IM|Xx#x#X"
 msgstr ""
 
-#: src/menus.C:1772
+#: src/menus.C:1761
 msgid "IM|Ff#f#F"
 msgstr "IM|bB#b#B"
 
-#: src/menus.C:1773
+#: src/menus.C:1762
 msgid "IM|Mm#m#M"
 msgstr ""
 
-#: src/menus.C:1774
+#: src/menus.C:1763
 msgid "IM|oO#o#O"
 msgstr ""
 
-#: src/menus.C:1775
+#: src/menus.C:1764
 msgid "IM|Tt#t#T"
 msgstr "IM|Ll#l#L"
 
-#: src/menus.C:1776
+#: src/menus.C:1765
 msgid "IM|Ss#s#S"
 msgstr ""
 
-#: src/menus.C:1777
+#: src/menus.C:1766
 msgid "IM|Nn#n#N"
 msgstr ""
 
-#: src/menus.C:1778
+#: src/menus.C:1767
 msgid "IM|Ll#l#L"
 msgstr "IM|Éé#é#É"
 
-#: src/menus.C:1779
+#: src/menus.C:1768
 msgid "IM|rR#r#R"
 msgstr "IM|Rr#r#R"
 
-#: src/menus.C:1780
+#: src/menus.C:1769
 msgid "IM|iI#i#I"
 msgstr "IM|Cc#c#C"
 
-#: src/menus.C:1781
+#: src/menus.C:1770
 msgid "IM|dD#d#D"
 msgstr "IM|xX#x#X"
 
-#: src/menus.C:1782
+#: src/menus.C:1771
 msgid "IM|wW#w#W"
 msgstr "IM|dD#d#D"
 
-#: src/menus.C:1784
+#: src/menus.C:1773
 msgid "|URL..."
 msgstr ""
 
-#: src/menus.C:1785
+#: src/menus.C:1774
 msgid "IM|Uu#u#U"
 msgstr ""
 
-#: src/menus.C:1891
+#: src/menus.C:1880
 msgid ""
 "Fraction|Square root|Exponent|Index|Sum|Integral%l|Math mode|Display%l|Math "
 "Panel..."
@@ -5074,74 +5087,74 @@ msgstr ""
 "Fraction|Racine carrée|Puissance|Indice|Somme|Intégrale%l|Mode "
 "mathématique|Déploiement%l|Palette mathématique..."
 
-#: src/menus.C:1901
+#: src/menus.C:1890
 msgid "MM|Ff#f#F"
 msgstr ""
 
-#: src/menus.C:1902
+#: src/menus.C:1891
 msgid "MM|Ss#s#S"
 msgstr ""
 
-#: src/menus.C:1903
+#: src/menus.C:1892
 msgid "MM|Ee#e#E"
 msgstr ""
 
-#: src/menus.C:1904
+#: src/menus.C:1893
 msgid "MM|xX#x#X"
 msgstr ""
 
-#: src/menus.C:1905
+#: src/menus.C:1894
 msgid "MM|uU#u#U"
 msgstr ""
 
-#: src/menus.C:1906
+#: src/menus.C:1895
 msgid "MM|Ii#i#I"
 msgstr ""
 
-#: src/menus.C:1907
+#: src/menus.C:1896
 msgid "MM|Mm#m#M"
 msgstr ""
 
-#: src/menus.C:1908
+#: src/menus.C:1897
 msgid "MM|Dd#d#D"
 msgstr ""
 
-#: src/menus.C:1909
+#: src/menus.C:1898
 msgid "MM|Pp#p#P"
 msgstr ""
 
-#: src/menus.C:1975
+#: src/menus.C:1964
 msgid ""
 "Screen Fonts...|Spellchecker Options...|Keyboard...|LaTeX...%l|Reconfigure"
 msgstr ""
 "Polices d'écran...|Options correcteur "
 "orthographique...|Clavier...|LaTeX...%l|Reconfiguration"
 
-#: src/menus.C:1981
+#: src/menus.C:1970
 msgid "OM|Ff#f#F"
 msgstr ""
 
-#: src/menus.C:1982
+#: src/menus.C:1971
 msgid "OM|Ss#s#S"
 msgstr ""
 
-#: src/menus.C:1983
+#: src/menus.C:1972
 msgid "OM|Kk#k#K"
 msgstr ""
 
-#: src/menus.C:1984
+#: src/menus.C:1973
 msgid "OM|Ll#l#L"
 msgstr ""
 
-#: src/menus.C:1985
+#: src/menus.C:1974
 msgid "OM|Rr#r#R"
 msgstr ""
 
-#: src/menus.C:2029
+#: src/menus.C:2018
 msgid "No Documents Open!%t"
 msgstr "Pas de documents ouverts !%t"
 
-#: src/menus.C:2064
+#: src/menus.C:2053
 msgid ""
 "Introduction|Tutorial|User's Guide|Extended Features|Customization|Reference "
 "Manual|FAQ|Table of Contents|Known Bugs|LaTeX Configuration%l|Copyright and "
@@ -5152,80 +5165,80 @@ msgstr ""
 "répertoriés|Configuration LaTeX%l|Copyright et "
 "garantie...|Crédits...|Version..."
 
-#: src/menus.C:2078
+#: src/menus.C:2067
 msgid "HM|Ii#I#i"
 msgstr ""
 
-#: src/menus.C:2079
+#: src/menus.C:2068
 msgid "HM|Tt#T#t"
 msgstr ""
 
-#: src/menus.C:2080
+#: src/menus.C:2069
 msgid "HM|Uu#U#u"
 msgstr ""
 
-#: src/menus.C:2081
+#: src/menus.C:2070
 msgid "HM|xX#x#X"
 msgstr ""
 
-#: src/menus.C:2082
+#: src/menus.C:2071
 msgid "HM|Cc#C#c"
 msgstr ""
 
-#: src/menus.C:2083
+#: src/menus.C:2072
 msgid "HM|Rr#R#r"
 msgstr ""
 
-#: src/menus.C:2084
+#: src/menus.C:2073
 msgid "HM|Ff#F#f"
 msgstr "FM|vV#v#V"
 
-#: src/menus.C:2085
+#: src/menus.C:2074
 msgid "HM|aA#a#A"
 msgstr "FM|sS#s#S"
 
-#: src/menus.C:2086
+#: src/menus.C:2075
 msgid "HM|Kk#K#k"
 msgstr ""
 
-#: src/menus.C:2087
+#: src/menus.C:2076
 msgid "HM|Ll#L#l"
 msgstr ""
 
-#: src/menus.C:2088
+#: src/menus.C:2077
 msgid "HM|oO#o#O"
 msgstr ""
 
-#: src/menus.C:2089
+#: src/menus.C:2078
 msgid "HM|eE#e#E"
 msgstr ""
 
-#: src/menus.C:2090
+#: src/menus.C:2079
 msgid "HM|Vv#v#V"
 msgstr ""
 
-#: src/menus.C:2113
+#: src/menus.C:2102
 msgid "LyX Version "
 msgstr "Version LyX"
 
-#: src/menus.C:2114
+#: src/menus.C:2103
 msgid " of "
 msgstr " de "
 
 # à revoir
-#: src/menus.C:2115
+#: src/menus.C:2104
 msgid "Library directory: "
 msgstr "Répertoire bibliothèque :"
 
-#: src/menus.C:2117
+#: src/menus.C:2106
 msgid "User directory: "
 msgstr "Répertoire utilisateur :"
 
-#: src/menus.C:2131
+#: src/menus.C:2120
 msgid "Could not find requested Documentation file"
 msgstr "Impossible d'insérer le document"
 
-#: src/menus.C:2135
+#: src/menus.C:2124
 msgid "Opening help file"
 msgstr "Ouverture du fichier d'aide"
 
@@ -5540,11 +5553,11 @@ msgstr "Attention !"
 
 #: src/table.C:990 src/tabular.C:1173
 msgid "Tabular format < 5 is not supported anymore\n"
-msgstr ""
+msgstr "Le format Tabular < 5 n'est plus supporté\n"
 
 #: src/table.C:991 src/tabular.C:1174
 msgid "Get an older version of LyX (< 1.1.x) for conversion!"
-msgstr ""
+msgstr "Utilisez une ancienne version de LyX (< 1.1.x) pour convertir"
 
 #: src/TableLayout.C:240
 msgid "Table Extra Form"
@@ -5614,11 +5627,11 @@ msgstr ""
 
 #: src/text.C:4027 src/text.C:4033
 msgid "Page Break (top)"
-msgstr "Saut de Page"
+msgstr "Saut de Page (Haut)"
 
 #: src/text.C:4209 src/text.C:4215
 msgid "Page Break (bottom)"
-msgstr ""
+msgstr "Saut de Page (Bas)"
 
 #: src/text.C:4635
 msgid "You can't insert a float in a float!"
index 9c80ec8edf24d91f6be5d80e9446947b7976331a..022f7075d3d67cbb4b7082234a6d8573b8c8be49 100644 (file)
@@ -6,11 +6,20 @@
 /**** Forms and Objects ****/
 
 typedef struct {
-       FL_FORM *citation_form;
+       FL_FORM *form;
        void *vdata;
        long ldata;
-       FL_OBJECT *key;
-       FL_OBJECT *label;
+       FL_OBJECT *box;
+       FL_OBJECT *citeBrsr;
+       FL_OBJECT *bibBrsr;
+       FL_OBJECT *infoBrsr;
+       FL_OBJECT *textAftr;
+       FL_OBJECT *addBtn;
+       FL_OBJECT *delBtn;
+       FL_OBJECT *upBtn;
+       FL_OBJECT *downBtn;
+       FL_OBJECT *ok;
+       FL_OBJECT *cancel;
 } FD_citation_form;
 
 
index df5878d35b7104a00f00503d7dd7d99e6c8c2c60..d4b4cc62c7cbcd75392f0ad66258d506eb2efa18 100644 (file)
@@ -314,7 +314,7 @@ void fl_set_bmtable_file(FL_OBJECT * ob, int nx, int ny, char const * filename)
 
 void fl_set_bmtable_pixmap_file(FL_OBJECT *ob, int nx, int ny, char const *filename)
 {      
-  //extern Colormap color_map;
+  /* extern Colormap color_map; */
        BMTABLE_SPEC *sp = (BMTABLE_SPEC *)ob->spec;
        if (sp) {
                Pixmap dummy_shapemask = 0;
@@ -343,7 +343,7 @@ void fl_set_bmtable_pixmap_file(FL_OBJECT *ob, int nx, int ny, char const *filen
                                XFreePixmap(fl_display, dummy_shapemask);
                        }
                }
-               //XFlush(fl_display);
+               /* XFlush(fl_display); */
        }
 }
 
index 7d1be9cb8956e8aefbc56f6e0468699fa95484d2..a7af3e04973b22970c8e7885f6c80faa56ef6095 100644 (file)
@@ -60,6 +60,7 @@
 #include "insets/insetquotes.h"
 #include "insets/insetlatexaccent.h"
 #include "insets/insetbib.h" 
+#include "insets/insetcite.h" 
 #include "insets/insetindex.h" 
 #include "insets/insetinclude.h"
 #include "insets/insettoc.h"
@@ -3833,49 +3834,43 @@ vector<vector<Buffer::TocItem> > Buffer::getTocList()
 }
 
 // This is also a buffer property (ale)
-string Buffer::getBibkeyList(char delim)
+vector<pair<string,string> > Buffer::getBibkeyList()
 {
        /// if this is a child document and the parent is already loaded
        /// Use the parent's list instead  [ale990412]
         if (!params.parentname.empty() && bufferlist.exists(params.parentname)) {
                Buffer * tmp = bufferlist.getBuffer(params.parentname);
                if (tmp)
-                       return tmp->getBibkeyList(delim);
+                       return tmp->getBibkeyList();
        }
 
-       string bibkeys;
+       vector<pair<string,string> > keys;
        LyXParagraph * par = paragraph;
        while (par) {
-               if (par->bibkey) {
-                       if (!bibkeys.empty())
-                               bibkeys += delim;
-                       bibkeys += par->bibkey->getContents();
-               }
+               if (par->bibkey)
+                       keys.push_back(pair<string,string>(par->bibkey->getContents(),
+                                                          par->String(false)));
                par = par->next;
        }
 
        // Might be either using bibtex or a child has bibliography
-       if (bibkeys.empty()) {
+       if (keys.empty()) {
                for (inset_iterator it = inset_iterator_begin();
-                    it != inset_iterator_end(); ++it) {
+                       it != inset_iterator_end(); ++it) {
                        // Search for Bibtex or Include inset
                        if ((*it)->LyxCode() == Inset::BIBTEX_CODE) {
-                               if (!bibkeys.empty())
-                                       bibkeys += delim;
-                               bibkeys += static_cast<InsetBibtex *>(*it)->getKeys(delim);
+                               vector<pair<string,string> > tmp =
+                                       static_cast<InsetBibtex*>(*it)->getKeys();
+                               keys.insert(keys.end(), tmp.begin(), tmp.end());
                        } else if ((*it)->LyxCode() == Inset::INCLUDE_CODE) {
-                               string bk(static_cast<InsetInclude *>(*it)->getKeys(delim));
-                               if (!bk.empty()) {
-                                       if (!bibkeys.empty())
-                                               bibkeys += delim;
-                                       bibkeys += bk;
-                               }
+                               vector<pair<string,string> > tmp =
+                                       static_cast<InsetInclude*>(*it)->getKeys();
+                               keys.insert(keys.end(), tmp.begin(), tmp.end());
                        }
                }
        }
  
-       lyxerr.debug() << "Bibkeys(" << bibkeys << ")" << endl;
-       return bibkeys;
+       return keys;
 }
 
 
index ad16276e25a19dd8a4101bc768a4245164147a54..85a5317390b79ebb05bb387879db219022765624 100644 (file)
@@ -291,7 +291,7 @@ public:
        ///
        string getIncludeonlyList(char delim = ',');
        ///
-       string getBibkeyList(char delim = '|');
+       std::vector<std::pair<string,string> > getBibkeyList();
        ///
        struct TocItem {
                LyXParagraph * par;
index 276a510daf44a05bb31355048ddba41fc20d8775..093913bcc58ffe88988eb2e7de921be7e86e9636 100644 (file)
@@ -16,6 +16,8 @@ libinsets_la_SOURCES = \
        inset.C \
        insetbib.C \
        insetbib.h \
+       insetcite.C \
+       insetcite.h \
        insetcollapsable.C \
        insetcollapsable.h \
        insetcommand.C \
index d17128bdfa2a8e9ea6505c543fc68472ee37339c..4fca380b18e547167db8835cac15490e27906dd6 100644 (file)
@@ -24,48 +24,28 @@ using std::ostream;
 using std::ifstream;
 using std::getline;
 using std::endl;
+using std::vector;
+using std::pair;
 
 extern BufferView * current_view;
 
-FD_citation_form * citation_form = 0;
 FD_bibitem_form * bibitem_form = 0;
-static Combox * bibcombox = 0;
 
-void BibitemUpdate(Combox *);
-FD_citation_form * create_form_citation_form(void);
 FD_bibitem_form * create_form_bibitem_form(void);
 
 
 extern "C" void bibitem_cb(FL_OBJECT *, long data)
 {
-       switch (data) {
-       case 1: // OK, citation
-        {
-               InsetCitation::Holder * holder =
-                       static_cast<InsetCitation::Holder*>
-                       (citation_form->citation_form->u_vdata);
-               if(!holder->view->buffer()->isReadonly()) {
-                       
-                       InsetCitation * inset = holder->inset;
-                       inset->setContents(bibcombox->getline());
-                       inset->setOptions(fl_get_input(citation_form->label));
-                       fl_hide_form(citation_form->citation_form);
-                       // shouldn't mark the buffer dirty unless something
-                       // was actually altered
-                       holder->view->updateInset(inset, true);
-                       break;
-               }
-               // fall through to Cancel on RO-mode
-        }       
-       case 0: fl_hide_form(citation_form->citation_form);
-                break;
-       case 3: // OK, bibitem
-        {
+       switch (data)
+       {
+       case 1:
+       {
                InsetBibKey::Holder * holder =
                        static_cast<InsetBibKey::Holder*>
                        (bibitem_form->bibitem_form->u_vdata);
                
-               if(!holder->view->buffer()->isReadonly()) {
+               if(!holder->view->buffer()->isReadonly())
+               {
                        InsetBibKey * inset = holder->inset;
                        inset->setContents(fl_get_input(bibitem_form->key));
                        inset->setOptions(fl_get_input(bibitem_form->label));
@@ -75,46 +55,14 @@ extern "C" void bibitem_cb(FL_OBJECT *, long data)
                        holder->view->update(1);
                        break;
                } // fall through to Cancel on RO-mode
-        }
-       case 2: // Cancel, bibitem
-               fl_hide_form(bibitem_form->bibitem_form); // Cancel, bibitem
+       }
+       case 0:
+               fl_hide_form(bibitem_form->bibitem_form);
                break;
         }
 }
 
 
-FD_citation_form * create_form_citation_form(void)
-{
-       FL_OBJECT * obj;
-       FD_citation_form * fdui = (FD_citation_form *) fl_calloc(1, sizeof(FD_citation_form));
-
-       fdui->citation_form = fl_bgn_form(FL_NO_BOX, 220, 130);
-       obj = fl_add_box(FL_UP_BOX, 0, 0, 220, 130, "");
-       fdui->key = obj = fl_add_text(FL_NORMAL_TEXT, 20, 10, 60, 30, _("Key:"));
-       fl_set_object_lsize(obj, FL_NORMAL_SIZE);
-       fl_set_object_lalign(obj, FL_ALIGN_RIGHT);
-
-       bibcombox = new Combox(FL_COMBOX_INPUT);
-       bibcombox->add(80, 10, 130, 30, 300);
-
-       obj = fl_add_button(FL_RETURN_BUTTON, 20, 90, 90, 30, _("OK"));
-       fl_set_object_lsize(obj, FL_NORMAL_SIZE);
-       fl_set_object_callback(obj, bibitem_cb, 1);
-       obj = fl_add_button(FL_NORMAL_BUTTON, 120, 90, 90, 30, idex(_("Cancel|^[")));
-       fl_set_button_shortcut(obj, scex(_("Cancel|^[")), 1);
-       fl_set_object_lsize(obj, FL_NORMAL_SIZE);
-       fl_set_object_callback(obj, bibitem_cb, 0);
-       fdui->label = obj = fl_add_input(FL_NORMAL_INPUT, 80, 50, 130, 30, idex(_("Remark:|#R")));
-       fl_set_input_shortcut(obj, scex(_("Remark:|#R")), 1);
-       fl_set_object_lsize(obj, FL_NORMAL_SIZE);
-       fl_end_form();
-
-       //fdui->citation_form->fdui = fdui;
-
-       return fdui;
-}
-/*---------------------------------------*/
-
 FD_bibitem_form * create_form_bibitem_form(void)
 {
        FL_OBJECT * obj;
@@ -127,11 +75,11 @@ FD_bibitem_form * create_form_bibitem_form(void)
        fl_set_object_lsize(obj, FL_NORMAL_SIZE);
        obj = fl_add_button(FL_RETURN_BUTTON, 20, 90, 90, 30, _("OK"));
        fl_set_object_lsize(obj, FL_NORMAL_SIZE);
-       fl_set_object_callback(obj, bibitem_cb, 3);
+       fl_set_object_callback(obj, bibitem_cb, 1);
        obj = fl_add_button(FL_NORMAL_BUTTON, 120, 90, 90, 30, idex(_("Cancel|^[")));
        fl_set_button_shortcut(obj, scex(_("Cancel|^[")), 1);
        fl_set_object_lsize(obj, FL_NORMAL_SIZE);
-       fl_set_object_callback(obj, bibitem_cb, 2);
+       fl_set_object_callback(obj, bibitem_cb, 0);
        fdui->label = obj = fl_add_input(FL_NORMAL_INPUT, 80, 50, 130, 30, idex(_("Label:|#L")));
        fl_set_input_shortcut(obj, scex(_("Label:|#L")), 1);
        fl_set_object_lsize(obj, FL_NORMAL_SIZE);
@@ -141,86 +89,19 @@ FD_bibitem_form * create_form_bibitem_form(void)
 
        return fdui;
 }
-/*---------------------------------------*/
-
-
-InsetCitation::InsetCitation(string const & key, string const & note)
-       : InsetCommand("cite", key, note)
-{
-
-}
-
-
-InsetCitation::~InsetCitation()
-{
-       if(citation_form && citation_form->citation_form
-          && citation_form->citation_form->visible
-          && citation_form->citation_form->u_vdata == &holder)
-               fl_hide_form(citation_form->citation_form);
-}
-
-
-void InsetCitation::Edit(BufferView * bv, int, int, unsigned int)
-{
-       if(bv->buffer()->isReadonly())
-               WarnReadonly(bv->buffer()->fileName());
-
-       if (!citation_form) {
-               citation_form = create_form_citation_form();
-               fl_set_form_atclose(citation_form->citation_form, 
-                                   CancelCloseBoxCB, 0);
-       }
-
-       holder.inset = this;
-       holder.view = bv;
-               
-       citation_form->citation_form->u_vdata = &holder;
-
-       BibitemUpdate(bibcombox);
-       if (!bibcombox->select_text(getContents().c_str()))
-               bibcombox->addline(getContents().c_str());
-           
-       fl_set_input(citation_form->label, getOptions().c_str());
-       if (citation_form->citation_form->visible) {
-               fl_raise_form(citation_form->citation_form);
-       } else {
-               fl_show_form(citation_form->citation_form,
-                            FL_PLACE_MOUSE, FL_FULLBORDER,
-                            _("Citation"));
-       }   
-}
-
-
-string InsetCitation::getScreenLabel() const
-{
-       string temp("[");
-
-       temp += contents;
-
-       if (!options.empty()) {
-               temp += ", " + options;
-       }
-
-       return temp + ']';
-}
 
-int InsetCitation::Ascii(ostream & os) const
-{
-       os << getScreenLabel();;
-       return 0;
-}
 
 InsetBibKey::InsetBibKey(string const & key, string const & label):
        InsetCommand("bibitem", key, label)
 {
        counter = 1;
        if (key.empty())
-               contents = ' ';
+               setCmdName(" ");
 }
 
 
 InsetBibKey::InsetBibKey(InsetBibKey const * b):
-       InsetCommand("bibitem", b->contents, b->options)
+       InsetCommand("bibitem", b->getContents(), b->getOptions())
 {
        counter = b->counter;
 }
@@ -238,8 +119,8 @@ void InsetBibKey::setCounter(int c)
 { 
        counter = c; 
     
-       if (contents.empty())
-               contents += tostr(counter);
+       if (getCmdName().empty())
+               setCmdName( tostr(counter) );
 }
 
 
@@ -250,19 +131,19 @@ void InsetBibKey::setCounter(int c)
 void InsetBibKey::Write(ostream & os) const
 {
        os << "\\bibitem ";
-       if (!options.empty()) {
+       if (! getOptions().empty()) {
                os << '['
-                  << options << ']';
+                  << getOptions() << ']';
        }
        os << '{'
-          << contents << "}\n";
+          << getContents() << "}\n";
 }
 
 
 string InsetBibKey::getScreenLabel() const
 {
-       if (!options.empty())
-               return options;
+       if (! getOptions().empty())
+               return getOptions();
     
        return tostr(counter);
 }
@@ -306,7 +187,6 @@ void InsetBibKey::Edit(BufferView * bv, int, int, unsigned int)
 }
 
 
-
 InsetBibtex::InsetBibtex(string const & dbase, string const & style,
                         Buffer * o)
        : InsetCommand("BibTeX", dbase, style), owner(o)
@@ -370,7 +250,7 @@ int InsetBibtex::Latex(ostream & os,
 
 
 // This method returns a comma separated list of Bibtex entries
-string InsetBibtex::getKeys(char delim)
+vector<pair<string,string> > InsetBibtex::getKeys() const
 {
        // This hack is copied from InsetBibtex::Latex.
        // Is it still needed? Probably yes.
@@ -384,7 +264,8 @@ string InsetBibtex::getKeys(char delim)
        
        Path p(owner->filepath);
 
-       string tmp, keys;
+       vector<pair<string,string> > keys;
+       string tmp;
        string bibfiles = getContents();
        bibfiles = split(bibfiles, tmp, ',');
        while(!tmp.empty()) {
@@ -398,23 +279,24 @@ string InsetBibtex::getKeys(char delim)
                        // in @ and not being @preamble and @string entries.
                        // It does NOT do any syntax checking!
                        ifstream ifs(fil.c_str());
-                       string linebuf;
-                       while (getline(ifs, linebuf)) {
-                               linebuf = frontStrip(linebuf);
+                       string linebuf0;
+                       while (getline(ifs, linebuf0)) {
+                               string linebuf = frontStrip(strip(linebuf0));
+                               if( linebuf.empty() ) continue;
                                if (prefixIs(linebuf, "@")) {
                                        linebuf = subst(linebuf, '{', '(');
                                        linebuf = split(linebuf, tmp, '(');
                                        tmp = lowercase(tmp);
                                        if (!prefixIs(tmp, "@string")
                                            && !prefixIs(tmp, "@preamble")) {
-                                               linebuf = split(linebuf,
-                                                               tmp, ',');
-                                               tmp = frontStrip(strip(tmp));
+                                               linebuf = split(linebuf, tmp, ',');
+                                               tmp = frontStrip(tmp);
                                                if (!tmp.empty()) {
-                                                       keys += tmp;
-                                                       keys += delim;
+                                                       keys.push_back(pair<string,string>(tmp,string()));
                                                }
                                        }
+                               } else if( !keys.empty() ) {
+                                       keys.back().second += linebuf + "\n";
                                }
                        }
                }
@@ -454,10 +336,10 @@ void InsetBibtex::Edit(BufferView * bv, int, int, unsigned int)
 
 bool InsetBibtex::addDatabase(string const & db)
 {
-       if (!contains(contents, db.c_str())) {
-               if (!contents.empty()) 
-                       contents += ',';
-               contents += db;
+       if (!contains(getContents(), db.c_str())) {
+               if (!getContents().empty()) 
+                       addContents(",");
+               addContents(db);
                return true;
        }
        return false;
@@ -466,16 +348,16 @@ bool InsetBibtex::addDatabase(string const & db)
 
 bool InsetBibtex::delDatabase(string const & db)
 {
-       if (contains(contents, db.c_str())) {
+       if (contains(getContents(), db.c_str())) {
                string bd = db;
-               int n = tokenPos(contents, ',', bd);
+               int n = tokenPos(getContents(), ',', bd);
                if (n > 0) {
                        // Weird code, would someone care to explain this?(Lgb)
                        string tmp(", ");
                        tmp += bd;
-                       contents = subst(contents, tmp.c_str(), ", ");
+                       setContents(subst(getContents(), tmp.c_str(), ", "));
                } else if (n == 0)
-                       contents = split(contents, bd, ',');
+                       setContents(split(getContents(), bd, ','));
                else 
                        return false;
        }
@@ -483,23 +365,6 @@ bool InsetBibtex::delDatabase(string const & db)
 }
 
 
-// This function should be in LyXView when multiframe works ale970302
-void BibitemUpdate(Combox * combox)
-{
-       combox->clear();
-       
-       if (!current_view->available()) return;
-       
-       string tmp, bibkeys = current_view->buffer()->getBibkeyList(',');
-       bibkeys = split(bibkeys, tmp,',');
-       while (!tmp.empty()) {
-               combox->addto(tmp.c_str());
-               bibkeys = split(bibkeys, tmp,',');
-       }
-}
-
-
-
 // ale070405 This function maybe shouldn't be here. We'll fix this at 0.13.
 int bibitemMaxWidth(Painter & pain, LyXFont const & font)
 {
@@ -519,7 +384,7 @@ int bibitemMaxWidth(Painter & pain, LyXFont const & font)
 
 
 // ale070405
-string bibitemWidthest(Painter & pain)
+string bibitemWidest(Painter & pain)
 {
        int w = 0;
        // Does look like a hack? It is! (but will change at 0.13)
index 0f34b7071d41a441ac425545d3fd358b8008d87a..62f7c0d5018fd6ec8785cbe27d833d460959b6ca 100644 (file)
 #endif
 
 #include "insetcommand.h"
+#include <vector>
 
 class Buffer;
 
-/** Used to insert citations  
- */
-class InsetCitation: public InsetCommand {
-public:
-       ///
-       InsetCitation() : InsetCommand("cite") {}
-       ///
-       explicit
-       InsetCitation(string const & key, string const & note = string());
-        ///
-       ~InsetCitation();
-        ///
-        Inset * Clone() const {
-               return new InsetCitation(contents, options);
-       }
-       ///
-       string getScreenLabel()const;
-        ///
-       void Edit(BufferView *, int x, int y, unsigned int button);
-        ///
-       EDITABLE Editable() const {
-               return IS_EDITABLE;
-       }
-       int Ascii(std::ostream &) const;
-       ///
-       struct Holder {
-               InsetCitation * inset;
-               BufferView * view;
-       };
-
-private:
-       ///
-       Holder holder;
-};
-
-
 /** Used to insert bibitem's information (key and label)
   
   Must be automatically inserted as the first object in a
@@ -122,7 +87,7 @@ public:
 
         ///
        Inset * Clone() const {
-               return new InsetBibtex(contents, options, 0);
+               return new InsetBibtex(getCmdName(), getOptions(), 0);
        }
        ///  
        Inset::Code LyxCode() const
@@ -136,7 +101,7 @@ public:
        /// 
        int Latex(std::ostream &, bool fragile, bool freespace) const;
        ///
-       string getKeys(char delim);
+       std::vector< std::pair<string,string> > getKeys() const;
        ///
        EDITABLE Editable() const {
                return IS_EDITABLE;
diff --git a/src/insets/insetcite.C b/src/insets/insetcite.C
new file mode 100644 (file)
index 0000000..7c1461f
--- /dev/null
@@ -0,0 +1,483 @@
+#include <config.h>
+
+#include <fstream>
+#include <cstdlib>
+#include <algorithm>
+
+#ifdef __GNUG__
+#pragma implementation
+#endif
+
+#include FORMS_H_LOCATION  
+#include "insetcite.h"
+#include "buffer.h"
+#include "debug.h"
+#include "lyx_gui_misc.h"
+#include "BufferView.h"
+#include "gettext.h"
+#include "lyxtext.h"
+#include "support/filetools.h"
+
+using std::getline;
+using std::vector;
+using std::pair;
+using std::max;
+using std::min;
+using std::find;
+
+FD_citation_form * citation_form = 0;
+FD_citation_form * create_form_citation_form(void);
+void set_size_citation_form(FD_citation_form *, int, bool);
+
+static vector<pair<string,string> > bibkeys_info;
+static vector<string> bibkeys;
+static vector<string> insetkeys;
+
+extern "C" void citation_cb( FL_OBJECT *, long data )
+{
+       InsetCitation::Holder * holder =
+               static_cast<InsetCitation::Holder*>(citation_form->form->u_vdata);
+
+       holder->inset->callback( citation_form,
+                                static_cast<InsetCitation::State>(data) );
+}
+
+
+FD_citation_form * create_form_citation_form(void)
+{
+       FL_OBJECT * obj;
+       FD_citation_form * fdui = (FD_citation_form *) fl_calloc(1, sizeof(*fdui));
+
+       // NOTE: dialog geometry is set in setSize(). 
+       // Initial size is simply non-zero.
+       fdui->form = fl_bgn_form(FL_NO_BOX, 10, 10);
+       fdui->box = obj = fl_add_box(FL_UP_BOX, 0, 0, 10, 10, "");
+
+       fdui->citeBrsr = obj =
+         fl_add_browser(FL_HOLD_BROWSER, 0, 0, 10, 10, _("Citation keys"));
+       fl_set_object_lalign(obj, FL_ALIGN_TOP_LEFT);
+       fl_set_object_lsize(obj, FL_NORMAL_SIZE);
+       fl_set_object_callback(obj, citation_cb, InsetCitation::CITEBRSR);
+
+       fdui->bibBrsr = obj =
+         fl_add_browser(FL_HOLD_BROWSER, 0, 0, 10, 10, _("Bibliography keys"));
+       fl_set_object_lalign(obj, FL_ALIGN_TOP_LEFT);
+       fl_set_object_lsize(obj, FL_NORMAL_SIZE);
+       fl_set_object_callback(obj, citation_cb, InsetCitation::BIBBRSR);
+
+       fdui->addBtn = obj =
+         fl_add_button(FL_NORMAL_BUTTON, 0, 0, 10, 10, "@4->");
+       fl_set_object_lsize(obj, FL_NORMAL_SIZE);
+       fl_set_object_callback(obj, citation_cb, InsetCitation::ADD);
+
+       fdui->delBtn = obj =
+         fl_add_button(FL_NORMAL_BUTTON, 0, 0, 10, 10, "@9+");
+       fl_set_object_lsize(obj, FL_NORMAL_SIZE);
+       fl_set_object_callback(obj, citation_cb, InsetCitation::DELETE);
+
+       fdui->upBtn = obj =
+         fl_add_button(FL_NORMAL_BUTTON, 0, 0, 10, 10, "@8->");
+       fl_set_object_lsize(obj, FL_NORMAL_SIZE);
+       fl_set_object_callback(obj, citation_cb, InsetCitation::UP);
+       
+       fdui->downBtn = obj =
+         fl_add_button(FL_NORMAL_BUTTON, 0, 0, 10, 10, "@2->");
+       fl_set_object_lsize(obj, FL_NORMAL_SIZE);
+       fl_set_object_callback(obj, citation_cb, InsetCitation::DOWN);
+
+       fdui->infoBrsr = obj =
+         fl_add_browser(FL_NORMAL_BROWSER, 0, 0, 10, 10, _("Info"));
+         fl_set_object_lsize(obj, FL_NORMAL_SIZE) ;
+         fl_set_object_lalign(obj, FL_ALIGN_TOP_LEFT);
+
+       fdui->textAftr = obj =
+         fl_add_input(FL_NORMAL_INPUT, 0, 0, 10, 10, _("Text after"));
+       fl_set_object_lsize(obj, FL_NORMAL_SIZE);
+
+       fdui->ok = obj =
+         fl_add_button(FL_RETURN_BUTTON, 0, 0, 10, 10, _("OK"));
+       fl_set_object_lsize(obj, FL_NORMAL_SIZE);
+       fl_set_object_callback(obj, citation_cb, InsetCitation::OK);
+
+       fdui->cancel = obj =
+         fl_add_button(FL_NORMAL_BUTTON, 0, 0, 10, 10, idex(_("Cancel|^[")));
+       fl_set_button_shortcut(obj, scex(_("Cancel|^[")), 1);
+       fl_set_object_lsize(obj, FL_NORMAL_SIZE);
+       fl_set_object_callback(obj, citation_cb, InsetCitation::CANCEL);
+
+       fl_end_form();
+  
+       return fdui;
+}
+
+
+InsetCitation::InsetCitation(string const & key, string const & note)
+       : InsetCommand("cite", key, note)
+{
+}
+
+
+InsetCitation::~InsetCitation()
+{
+       if(citation_form && citation_form->form
+          && citation_form->form->visible
+          && citation_form->form->u_vdata == &holder)
+               fl_hide_form(citation_form->form);
+}
+
+
+void InsetCitation::Edit( BufferView * bv, int, int, unsigned int )
+{
+       if ( !citation_form ) {
+               citation_form = create_form_citation_form();
+               fl_set_form_atclose( citation_form->form, 
+                                    CancelCloseBoxCB, 0 );
+       }
+
+       holder.inset = this;
+       holder.view = bv;
+               
+       citation_form->form->u_vdata = &holder;
+
+       // update the browsers, noting the number of keys.
+       bibkeys_info = bv->buffer()->getBibkeyList();
+       bibkeys.clear();
+       insetkeys.clear();
+       for( unsigned int i = 0; i < bibkeys_info.size(); ++i )
+               bibkeys.push_back(bibkeys_info[i].first);
+
+       string tmp;
+       string keys = getContents();
+       keys = frontStrip( split(keys, tmp, ',') );
+       while( !tmp.empty() ) {
+               insetkeys.push_back( tmp );
+               keys = frontStrip( split(keys, tmp, ',') );
+       }
+
+       updateBrowser( citation_form->bibBrsr, bibkeys );
+       updateBrowser( citation_form->citeBrsr, insetkeys );
+       fl_clear_browser( citation_form->infoBrsr );
+
+       // No keys have been selected yet, so...
+       setBibButtons(  citation_form, OFF );
+       setCiteButtons( citation_form, OFF );
+
+       int noKeys = max( bibkeys.size(), insetkeys.size() );
+
+       // Place bounds, so that 4 <= noKeys <= 15
+       noKeys = max( 4, min(15, noKeys) );
+
+       // Re-size the form to accommodate the new browser size
+       int size = 20 * noKeys;
+       bool bibPresent = ( bibkeys.size() > 0 );
+       setSize(citation_form, size, bibPresent);
+
+       fl_set_input( citation_form->textAftr, getOptions().c_str() );
+       if( holder.view->buffer()->isReadonly() )
+               fl_deactivate_object( citation_form->textAftr );
+
+       if( citation_form->form->visible ) {
+               fl_raise_form( citation_form->form );
+       } else {
+               fl_show_form( citation_form->form,
+                             FL_PLACE_MOUSE, FL_FULLBORDER,
+                             _("Citation") );
+       } 
+}
+
+
+void InsetCitation::updateBrowser( FL_OBJECT * browser,
+                                  vector<string> const & inkeys ) const
+{
+       fl_clear_browser( browser );
+
+       fl_freeze_form( browser->form );
+       for( unsigned int i = 0; i < inkeys.size(); ++i )
+               fl_add_browser_line( browser, inkeys[i].c_str() );
+       fl_unfreeze_form( browser->form );
+}
+
+void InsetCitation::callback( FD_citation_form * form, State cb )
+{
+       switch( cb ) {
+       case BIBBRSR: {
+               fl_deselect_browser( form->citeBrsr );
+               
+               unsigned int sel = fl_get_browser( form->bibBrsr );
+               if( sel < 1 || sel > bibkeys.size() ) break;
+
+               // Put into infoBrsr the additional info associated with
+               // the selected bibBrsr key
+               fl_clear_browser( form->infoBrsr );
+               fl_add_browser_line( form->infoBrsr,
+                                    bibkeys_info[sel-1].second.c_str() );
+
+               // Highlight the selected bibBrsr key in citeBrsr if present
+               vector<string>::iterator it =
+                       find( insetkeys.begin(), insetkeys.end(), bibkeys[sel-1] );
+
+               if( it != insetkeys.end() ) {
+                       int n = it - insetkeys.begin();
+                       fl_select_browser_line( form->citeBrsr, n+1 );
+                       fl_set_browser_topline( form->citeBrsr, n+1 );
+               }
+
+               if( !holder.view->buffer()->isReadonly() ) {
+                       if( it != insetkeys.end() ) {
+                               setBibButtons(  form, OFF );
+                               setCiteButtons( form, ON );
+                       } else {
+                               setBibButtons(  form, ON );
+                               setCiteButtons( form, OFF );
+                       }
+               }
+               break;
+
+       } case CITEBRSR: {
+               unsigned int sel = fl_get_browser( form->citeBrsr );
+               if( sel < 1 || sel > insetkeys.size() ) break;
+
+               if( !holder.view->buffer()->isReadonly() ) {
+                       setBibButtons(  form, OFF );
+                       setCiteButtons( form, ON );
+               }
+
+               // Highlight the selected citeBrsr key in bibBrsr
+               vector<string>::iterator it =
+                       find( bibkeys.begin(), bibkeys.end(), insetkeys[sel-1] );
+
+               if (it != bibkeys.end()) {
+                       int n = it - bibkeys.begin();
+                       fl_select_browser_line( form->bibBrsr, n+1 );
+                       fl_set_browser_topline( form->bibBrsr, n+1 );
+
+                       // Put into infoBrsr the additional info associated with
+                       // the selected citeBrsr key
+                       fl_clear_browser( form->infoBrsr );
+                       fl_add_browser_line( form->infoBrsr,
+                                            bibkeys_info[n].second.c_str() );
+               }
+               break;
+
+       } case ADD: {
+               if( holder.view->buffer()->isReadonly() ) break;
+
+               unsigned int sel = fl_get_browser( form->bibBrsr );
+               if( sel < 1 || sel > bibkeys.size() ) break;
+
+               // Add the selected bibBrsr key to citeBrsr
+               fl_addto_browser( form->citeBrsr,
+                                 bibkeys[sel-1].c_str() );
+               insetkeys.push_back( bibkeys[sel-1] );
+
+               int n = insetkeys.size();
+               fl_select_browser_line( form->citeBrsr, n );
+
+               setBibButtons(  form, OFF );
+               setCiteButtons( form, ON );
+
+               break;
+
+       } case DELETE: {
+               if( holder.view->buffer()->isReadonly() ) break;
+
+               unsigned int sel = fl_get_browser( form->citeBrsr );
+               if( sel < 1 || sel > insetkeys.size() ) break;
+
+               // Remove the selected key from citeBrsr
+               fl_delete_browser_line( form->citeBrsr, sel ) ;
+               insetkeys.erase( insetkeys.begin() + sel-1 );
+
+               setBibButtons(  form, ON );
+               setCiteButtons( form, OFF );
+               break;
+
+       } case UP: {
+               if( holder.view->buffer()->isReadonly() ) break;
+
+               unsigned int sel = fl_get_browser( form->citeBrsr );
+               if( sel < 2 || sel > insetkeys.size() ) break;
+
+               // Move the selected key up one line
+               vector<string>::iterator it = insetkeys.begin() + sel-1;
+               string tmp = *it;
+
+               fl_delete_browser_line( form->citeBrsr, sel );
+               insetkeys.erase( it );
+
+               fl_insert_browser_line( form->citeBrsr, sel-1, tmp.c_str() );
+               fl_select_browser_line( form->citeBrsr, sel-1 );
+               insetkeys.insert( it-1, tmp );
+               setCiteButtons( form, ON );
+
+               break;
+
+       } case DOWN: {
+               if( holder.view->buffer()->isReadonly() ) break;
+
+               unsigned int sel = fl_get_browser( form->citeBrsr );
+               if( sel < 1 || sel > insetkeys.size()-1 ) break;
+
+               // Move the selected key down one line
+               vector<string>::iterator it = insetkeys.begin() + sel-1;
+               string tmp = *it;
+
+               fl_delete_browser_line( form->citeBrsr, sel );
+               insetkeys.erase( it );
+
+               fl_insert_browser_line( form->citeBrsr, sel+1, tmp.c_str() );
+               fl_select_browser_line( form->citeBrsr, sel+1 );
+               insetkeys.insert( it+1, tmp );
+               setCiteButtons( form, ON );
+
+               break;
+
+       } case OK: {
+               // The inset contains a comma separated list of the keys
+               // in citeBrsr
+               if( !holder.view->buffer()->isReadonly() )
+               {
+                       string tmp;
+                       for( unsigned int i = 0; i < insetkeys.size(); ++i ) {
+                               if (i > 0)
+                                       tmp += ", ";
+                               tmp += insetkeys[i];
+                       }
+                       setContents( tmp );
+                       setOptions( fl_get_input(form->textAftr) );
+                       // shouldn't mark the buffer dirty unless something
+                       // was actually altered
+                       holder.view->updateInset( this, true );
+               }
+               // fall through to Cancel
+
+       } case CANCEL: {
+               fl_hide_form( form->form );
+               break;
+
+        } default:
+               break;
+       }
+}
+
+
+void InsetCitation::setSize( FD_citation_form * form,
+                            int brsrHeight, bool bibPresent ) const
+{
+       int const infoHeight  = 110;
+       int const otherHeight = 140;
+       brsrHeight = max( brsrHeight, 175 );
+       int formHeight = brsrHeight + otherHeight;
+
+       if( bibPresent ) formHeight += infoHeight + 30;
+       fl_set_form_size( form->form, 430, formHeight );
+
+       int ypos = 0;
+       fl_set_object_geometry( form->box,      0,   ypos, 430, formHeight );
+       ypos += 30;
+       fl_set_object_geometry( form->citeBrsr, 10,  ypos, 180, brsrHeight );
+       fl_set_object_geometry( form->bibBrsr,  240, ypos, 180, brsrHeight );
+       fl_set_object_geometry( form->addBtn,   200, ypos,  30, 30 );
+       ypos += 35;
+       fl_set_object_geometry( form->delBtn,   200, ypos,  30, 30 );
+       ypos += 35;
+       fl_set_object_geometry( form->upBtn,    200, ypos,  30, 30 );
+       ypos += 35;
+       fl_set_object_geometry( form->downBtn,  200, ypos,  30, 30 );
+
+       ypos = brsrHeight+30; // base of Citation/Bibliography browsers
+
+       if( bibPresent ) {
+               ypos += 30;
+               fl_set_object_geometry( form->infoBrsr, 10, ypos, 410, infoHeight );
+               fl_show_object( form->infoBrsr );
+               ypos += infoHeight;
+       }
+       else
+               fl_hide_object( form->infoBrsr );
+
+       ypos += 20;
+       fl_set_object_geometry( form->textAftr, 100, ypos,   250, 30 );
+       fl_set_object_geometry( form->ok,       230, ypos+50, 90, 30 );
+       fl_set_object_geometry( form->cancel,   330, ypos+50, 90, 30 );
+}
+
+
+void InsetCitation::setBibButtons( FD_citation_form * form, State status ) const
+{
+       switch (status) {
+       case ON:
+        {
+               fl_activate_object( form->addBtn );
+               fl_set_object_lcol( form->addBtn, FL_BLACK );
+
+               break;
+       }
+       case OFF:
+       {
+               fl_deactivate_object( form->addBtn );
+               fl_set_object_lcol( form->addBtn, FL_INACTIVE );
+       }
+       default:
+               break;
+       }
+}
+
+
+void InsetCitation::setCiteButtons( FD_citation_form * form, State status ) const
+{
+       switch( status ) {
+       case ON:
+        {
+               fl_activate_object( form->delBtn );
+               fl_set_object_lcol( form->delBtn, FL_BLACK );
+
+               unsigned int sel = fl_get_browser( form->citeBrsr );
+
+               if( sel != 1 ) {
+                       fl_activate_object( form->upBtn );
+                       fl_set_object_lcol( form->upBtn, FL_BLACK );
+               } else {
+                       fl_deactivate_object( form->upBtn );
+                       fl_set_object_lcol( form->upBtn, FL_INACTIVE );
+               }
+
+               if( sel != fl_get_browser_maxline( form->citeBrsr ) ) {
+                       fl_activate_object( form->downBtn );
+                       fl_set_object_lcol( form->downBtn, FL_BLACK );
+               } else {
+                       fl_deactivate_object( form->downBtn );
+                       fl_set_object_lcol( form->downBtn, FL_INACTIVE );
+               }
+
+               break;
+       }
+       case OFF:
+       {
+               fl_deactivate_object( form->delBtn );
+               fl_set_object_lcol( form->delBtn, FL_INACTIVE );
+
+               fl_deactivate_object( form->upBtn );
+               fl_set_object_lcol( form->upBtn, FL_INACTIVE );
+
+               fl_deactivate_object( form->downBtn );
+               fl_set_object_lcol( form->downBtn, FL_INACTIVE );
+       }
+       default:
+               break;
+       }
+}
+
+
+string InsetCitation::getScreenLabel() const
+{
+       string temp("[");
+
+       temp += getContents();
+
+       if( !getOptions().empty() ) {
+               temp += ", " + getOptions();
+       }
+
+       return temp + ']';
+}
diff --git a/src/insets/insetcite.h b/src/insets/insetcite.h
new file mode 100644 (file)
index 0000000..ee15813
--- /dev/null
@@ -0,0 +1,82 @@
+// -*- C++ -*-
+/* This file is part of*
+ * ====================================================== 
+ *
+ *           LyX, The Document Processor
+ *      
+ *           Copyright 1995 Matthias Ettrich
+ *           Copyright 1995-2000 The LyX Team.
+ * 
+ * ====================================================== */
+
+#ifndef INSET_CITE_H
+#define INSET_CITE_H
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+#include "insetcommand.h"
+#include "bibforms.h"
+#include <vector>
+
+class Buffer;
+
+/** Used to insert citations  
+ */
+class InsetCitation: public InsetCommand {
+public:
+       ///
+       enum State {
+               CANCEL,
+               OK,
+               DOWN,
+               UP,
+               DELETE,
+               ADD,
+               BIBBRSR,
+               CITEBRSR,
+               ON,
+               OFF
+       };
+       ///
+       InsetCitation() : InsetCommand("cite") {}
+       ///
+       explicit
+       InsetCitation(string const & key, string const & note = string());
+        ///
+       ~InsetCitation();
+        ///
+        Inset * Clone() const {
+               return new InsetCitation(getContents(), getOptions());
+       }
+       ///
+       string getScreenLabel()const;
+        ///
+       void Edit(BufferView *, int x, int y, unsigned int button);
+       ///
+       void callback( FD_citation_form *, State );
+        ///
+       EDITABLE Editable() const {
+               return IS_EDITABLE;
+       }
+       ///
+       struct Holder {
+               InsetCitation * inset;
+               BufferView * view;
+       };
+
+private:
+        ///
+       void setSize( FD_citation_form *, int, bool ) const;
+       ///
+       void setBibButtons( FD_citation_form *, State ) const;
+       ///
+       void setCiteButtons( FD_citation_form *, State ) const;
+       ///
+       void updateBrowser( FL_OBJECT *, std::vector<string> const & ) const;
+        ///    
+       Holder holder;
+};
+
+#endif // INSET_CITE_H
index 69322ae8905cc40caa50164553a0d2bf939f3760..e95b798a530667f676c092ce5367fe18bb94fedf 100644 (file)
@@ -29,7 +29,7 @@ InsetCommand::InsetCommand()
 
 InsetCommand::InsetCommand(string const & cmd, string const & arg, 
                           string const & opt)
-       : command(cmd), options(opt), contents(arg)
+       : cmdname(cmd), options(opt), contents(arg)
 {
 }
 
@@ -125,46 +125,46 @@ void InsetCommand::Write(ostream & os) const
 
 void InsetCommand::scanCommand(string const & cmd)
 {
-       string tcommand, toptions, tcontents;
+       string tcmdname, toptions, tcontents;
 
        if (cmd.empty()) return;
 
-       enum { WS, Command, Option, Content } state = WS;
+       enum { WS, CMDNAME, OPTION, CONTENT } state = WS;
        
        // Used to handle things like \command[foo[bar]]{foo{bar}}
        int nestdepth = 0;
 
        for (string::size_type i = 0; i < cmd.length(); ++i) {
                char c = cmd[i];
-               if ((state == Command && c == ' ') ||
-                   (state == Command && c == '[') ||
-                   (state == Command && c == '{')) {
+               if ((state == CMDNAME && c == ' ') ||
+                   (state == CMDNAME && c == '[') ||
+                   (state == CMDNAME && c == '{')) {
                        state = WS;
                }
-               if ((state == Option  && c == ']') ||
-                   (state == Content && c == '}')) {
+               if ((state == OPTION  && c == ']') ||
+                   (state == CONTENT && c == '}')) {
                        if (nestdepth == 0) {
                                state = WS;
                        } else {
                                --nestdepth;
                        }
                }
-               if ((state == Option  && c == '[') ||
-                   (state == Content && c == '{')) {
+               if ((state == OPTION  && c == '[') ||
+                   (state == CONTENT && c == '{')) {
                        ++nestdepth;
                }
                switch (state) {
-               case Command:   tcommand += c; break;
-               case Option:    toptions += c; break;
-               case Content:   tcontents += c; break;
+               case CMDNAME:   tcmdname += c; break;
+               case OPTION:    toptions += c; break;
+               case CONTENT:   tcontents += c; break;
                case WS:
                        if (c == '\\') {
-                               state = Command;
+                               state = CMDNAME;
                        } else if (c == '[') {
-                               state = Option;
+                               state = OPTION;
                                nestdepth = 0; // Just to be sure
                        } else if (c == '{') {
-                               state = Content;
+                               state = CONTENT;
                                nestdepth = 0; // Just to be sure
                        }
                        break;
@@ -172,7 +172,7 @@ void InsetCommand::scanCommand(string const & cmd)
        }
 
        // Don't mess with this.
-       if (!tcommand.empty()) command = tcommand;
+       if (!tcmdname.empty()) cmdname = tcmdname;
        if (!toptions.empty()) options = toptions;
        if (!tcontents.empty()) setContents(tcontents); 
                        // setContents is overloaded in InsetInclude
@@ -224,14 +224,14 @@ int InsetCommand::DocBook(ostream &) const
 
 Inset * InsetCommand::Clone() const
 {
-       return new InsetCommand(command, contents, options);
+       return new InsetCommand(cmdname, contents, options);
 }
 
 
 string InsetCommand::getCommand() const
 {      
        string s;
-       if (!command.empty()) s += "\\"+command;
+       if (!cmdname.empty()) s += "\\"+cmdname;
        if (!options.empty()) s += "["+options+']';
        s += "{"+contents+'}';
        return s;
index 449d0f19ed2e01e35decdb75918c5829dbd68df3..ed473534ea618d94ed1185ec915d7515c63dce53 100644 (file)
@@ -74,12 +74,12 @@ public:
        {
                return getCommand();
        }
-       
+
        /// Build the complete LaTeX command
        string getCommand() const;
        ///
        string const & getCmdName() const {
-               return command;
+               return cmdname;
        }
        ///
        string const & getOptions() const {
@@ -91,7 +91,7 @@ public:
        }
        ///
        void setCmdName(string const & n) {
-               command = n;
+               cmdname = n;
        }
        ///
        void setOptions(string const & o) {
@@ -101,9 +101,13 @@ public:
        virtual void setContents(string const & c) {
                contents = c;
        }
-protected:
+       ///
+       void addContents(string const & c) {
+               contents += c;
+       }
+private:
        ///    
-       string command;
+       string cmdname;
        ///    
        string options;
        ///    
index 78f32359a9375b0c3a83533e9cd6dba484786030..9594984db742118245e5eca9b9fbe2e2ce968320 100644 (file)
@@ -26,6 +26,7 @@
 using std::ostream;
 using std::endl;
 using std::vector;
+using std::pair;
 
 extern BufferView * current_view;
 
@@ -216,7 +217,7 @@ InsetInclude::~InsetInclude()
 
 Inset * InsetInclude::Clone() const
 { 
-       InsetInclude * ii = new InsetInclude (contents, master); 
+       InsetInclude * ii = new InsetInclude (getContents(), master); 
        ii->setNoLoad(isNoLoad());
        // By default, the newly created inset is of `include' type,
        // so we do not test this case.
@@ -241,7 +242,7 @@ void InsetInclude::Edit(BufferView * bv, int, int, unsigned int)
        }
         form->include->u_vdata = this;
     
-        fl_set_input(form->input, contents.c_str());
+        fl_set_input(form->input, getContents().c_str());
        fl_set_button(form->flag1, int(isNoLoad()));
        fl_set_button(form->flag2, int(isInput()));
        fl_set_button(form->flag3, int(isInclude()));
@@ -302,10 +303,10 @@ string InsetInclude::getScreenLabel() const
        } else temp += _("Include");
        temp += ": ";
        
-       if (contents.empty()) {
+       if (getContents().empty()) {
                temp+= "???";
        } else {
-               temp+= contents;
+               temp+= getContents();
        }
        return temp;
 }
@@ -314,7 +315,7 @@ string InsetInclude::getScreenLabel() const
 void InsetInclude::setContents(string const & c)
 {
        InsetCommand::setContents(c);
-       filename = MakeAbsPath(contents
+       filename = MakeAbsPath(getContents()
                               OnlyPath(getMasterFilename())); 
 }
 
@@ -337,12 +338,12 @@ int InsetInclude::Latex(ostream & os,
                        bool /*fragile*/, bool /*fs*/) const
 {
        // Do nothing if no file name has been specified
-       if (contents.empty())
+       if (getContents().empty())
                return 0;
     
        // Use += to force a copy of contents (JMarc)
        // How does that force anything? (Lgb)
-       string incfile(contents);
+       string incfile(getContents());
 
        if (loadIfNeeded()) {
                Buffer * tmp = bufferlist.getBuffer(getFileName());
@@ -381,21 +382,21 @@ int InsetInclude::Latex(ostream & os,
        } 
 
        if (isVerb()) {
-               os << '\\' << command << '{' << incfile << '}';
+               os << '\\' << getCmdName() << '{' << incfile << '}';
        } 
        else if (isInput()) {
                // \input wants file with extension (default is .tex)
                if (!IsLyXFilename(getFileName())) {
-                       os << '\\' << command << '{' << incfile << '}';
+                       os << '\\' << getCmdName() << '{' << incfile << '}';
                } else {
-                       os << '\\' << command << '{'
+                       os << '\\' << getCmdName() << '{'
                           << ChangeExtension(incfile, ".tex")
                           <<  '}';
                }
        } else {
                // \include don't want extension and demands that the
                // file really have .tex
-               os << '\\' << command << '{'
+               os << '\\' << getCmdName() << '{'
                   << ChangeExtension(incfile, string())
                   << '}';
        }
@@ -436,16 +437,16 @@ vector<string> InsetInclude::getLabelList() const
 }
 
 
-string InsetInclude::getKeys(char delim) const
+vector<pair<string,string> > InsetInclude::getKeys() const
 {
-       string lst;
+       vector<pair<string,string> > keys;
        
        if (loadIfNeeded()) {
                Buffer *tmp = bufferlist.getBuffer(getFileName());
                tmp->setParentName(""); 
-               lst =  tmp->getBibkeyList(delim);
+               keys =  tmp->getBibkeyList();
                tmp->setParentName(getMasterFilename());
        }
        
-       return lst;
+       return keys;
 }
index b430c521d2ca751c6d827cbc8ed3100f7909e6ea..b2839b03f72572c0981e2d2f32d26bee65a71741 100644 (file)
@@ -43,7 +43,7 @@ public:
        /// This returns the list of labels on the child buffer
        std::vector<string> getLabelList() const;
        /// This returns the list of bibkeys on the child buffer
-       string getKeys(char delim) const;
+       std::vector< std::pair<string,string> > getKeys() const;
        ///
        void Edit(BufferView *, int x, int y, unsigned int button);
        ///
index 82642abd31e4eab333ca9edae8aff407e307ebc7..25e2c89d6ac826eb8acfcc6b7c08d6bec020612a 100644 (file)
@@ -36,7 +36,7 @@ public:
        ///
        ~InsetIndex();
        ///
-       Inset * Clone() const { return new InsetIndex(contents);}
+       Inset * Clone() const { return new InsetIndex(getContents());}
        ///
        void Edit(BufferView *, int, int, unsigned int);
        ///
index ea7b8e6e1e99c2c2800ac52e2179d142e1d2f6c7..02f3930d4a2edaa05964c54209e12724e8b0ac94 100644 (file)
@@ -42,7 +42,7 @@ Inset * InsetLabel::Clone() const
 
 vector<string> InsetLabel::getLabelList() const
 {
-       return vector<string>(1,contents);
+       return vector<string>(1,getContents());
 }
 
 
@@ -53,15 +53,14 @@ void InsetLabel::Edit(BufferView * bv, int, int, unsigned int)
                return;
        }
 
-       pair<bool, string> result = askForText(_("Enter label:"),
-                                              contents);
+       pair<bool, string> result = askForText(_("Enter label:"), getContents());
        if (result.first) {
                string new_contents = frontStrip(strip(result.second));
                if (!new_contents.empty() &&
-                   contents != new_contents) {
+                   getContents() != new_contents) {
                        bv->buffer()->markDirty();
-                       bool flag = bv->ChangeRefs(contents,new_contents);
-                       contents = new_contents;
+                       bool flag = bv->ChangeRefs(getContents(),new_contents);
+                       setContents( new_contents );
                        bv->text->RedoParagraph();
                        if (flag) {
                                bv->redraw();
index 88ded8a2e47f509a7c50170b086a620cf2a61a42..42b694b6e12d75aa461bf0406013fe9c8f7e0827 100644 (file)
@@ -175,8 +175,8 @@ void CloseAllBufferRelatedPopups()
                }
        }
        if (citation_form) {
-               if (citation_form->citation_form->visible) {
-                       fl_hide_form(citation_form->citation_form);
+               if (citation_form->form->visible) {
+                       fl_hide_form(citation_form->form);
                }
        }
        if (bibitem_form) {
@@ -323,8 +323,8 @@ void updateAllVisibleBufferRelatedPopups()
        }
 #endif
        if (citation_form) {
-               if (citation_form->citation_form->visible) {
-                       fl_hide_form(citation_form->citation_form);
+               if (citation_form->form->visible) {
+                       fl_hide_form(citation_form->form);
                }
        }
        if (bibitem_form) {
index ed4d0e16bb09567fe3c0616b0b589ec22df39fd8..c827ce2d52ed3ca9900e05146e1f5cc42da40105 100644 (file)
@@ -49,6 +49,7 @@ using std::istringstream;
 #include "insets/insetindex.h"
 #include "insets/insetinclude.h"
 #include "insets/insetbib.h"
+#include "insets/insetcite.h"
 #include "insets/insettext.h"
 #include "insets/insetert.h"
 #include "insets/insetgraphics.h"
index 6f1986c8ef4835e994a21de1f58482c188357934..6f474849d2b85c3672bdbc8001d65ca5390c890c 100644 (file)
@@ -46,10 +46,7 @@ int tex_code_break_column = 72;  // needs non-zero initialization. set later.
 // this is a bad idea, but how can LyXParagraph find its buffer to get
 // parameters? (JMarc)
 extern BufferView * current_view;
-
-
-// ale970405
-extern string bibitemWidthest(Painter &);
+extern string bibitemWidest(Painter &);
 
 // this is a minibuffer
 static char minibuffer_char;
@@ -3644,7 +3641,7 @@ LyXParagraph * LyXParagraph::TeXEnvironment(ostream & os, TexRow & texrow,
                } else if (style.labeltype == LABEL_BIBLIO) {
                        // ale970405
                        os << "\\begin{" << style.latexname() << "}{"
-                          << bibitemWidthest(current_view->painter())
+                          <<  bibitemWidest(current_view->painter())
                           << "}\n";
                } else if (style.latextype == LATEX_ITEM_ENVIRONMENT) {
 #ifdef FANCY_FOOTNOTE_CODE
index f5739615e80d7bb9c37b027184ddea643f9096ee..02d35343899237fd05320aab7acdcbf229e06a46 100644 (file)
@@ -40,9 +40,6 @@ using std::endl;
 using std::pair;
 
 static const int LYX_PAPER_MARGIN = 20;
-
-
-// ale070405
 extern int bibitemMaxWidth(Painter &, LyXFont const &);
 
 static int iso885968x[] = {