New citation popup from Angus

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@800 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Jean-Marc Lasgouttes 2000-06-07 08:53:40 +00:00
parent 3be457e011
commit 474b65cd25
25 changed files with 1257 additions and 674 deletions

View File

@ -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

View 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

250
forms/cite.fd Normal file
View File

@ -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

View 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

View 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

559
po/fr.po

File diff suppressed because it is too large Load Diff

View 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;

View 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); */
}
}

View 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) {
// 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;
}

View 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;

View File

@ -16,6 +16,8 @@ libinsets_la_SOURCES = \
inset.C \
insetbib.C \
insetbib.h \
insetcite.C \
insetcite.h \
insetcollapsable.C \
insetcollapsable.h \
insetcommand.C \

View 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
switch (data)
{
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
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));
@ -76,45 +56,13 @@ extern "C" void bibitem_cb(FL_OBJECT *, long data)
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)

View File

@ -17,45 +17,10 @@
#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;

483
src/insets/insetcite.C Normal file
View File

@ -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 + ']';
}

82
src/insets/insetcite.h Normal file
View File

@ -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

View 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;

View File

@ -79,7 +79,7 @@ public:
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:
///
string command;
void addContents(string const & c) {
contents += c;
}
private:
///
string cmdname;
///
string options;
///

View 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;
}

View 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);
///

View 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);
///

View 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();

View 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) {

View 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"

View 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

View 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[] = {