2000-07-07 07:46:37 +00:00
|
|
|
// -*- C++ -*-
|
|
|
|
/* This file is part of
|
|
|
|
* ======================================================
|
|
|
|
*
|
|
|
|
* LyX, The Document Processor
|
|
|
|
*
|
|
|
|
* Copyright 2000 The LyX Team.
|
|
|
|
*
|
|
|
|
* ======================================================
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include <config.h>
|
2000-07-27 10:26:38 +00:00
|
|
|
|
2000-07-07 07:46:37 +00:00
|
|
|
#include FORMS_H_LOCATION
|
2000-07-27 10:26:38 +00:00
|
|
|
|
2000-08-01 18:11:14 +00:00
|
|
|
#include <algorithm>
|
|
|
|
|
2000-07-27 10:26:38 +00:00
|
|
|
#ifdef __GNUG__
|
|
|
|
#pragma implementation
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
2000-07-07 07:46:37 +00:00
|
|
|
#include "Dialogs.h"
|
2000-07-27 08:55:59 +00:00
|
|
|
#include "FormCitation.h"
|
2000-07-07 07:46:37 +00:00
|
|
|
#include "LyXView.h"
|
2000-07-27 08:55:59 +00:00
|
|
|
#include "buffer.h"
|
|
|
|
#include "form_citation.h"
|
2000-07-07 07:46:37 +00:00
|
|
|
#include "lyxfunc.h"
|
|
|
|
#include "support/filetools.h"
|
|
|
|
|
|
|
|
using std::vector;
|
|
|
|
using std::pair;
|
|
|
|
using std::max;
|
|
|
|
using std::min;
|
|
|
|
using std::find;
|
|
|
|
|
2000-09-04 13:22:22 +00:00
|
|
|
static int min_wform;
|
|
|
|
|
2000-07-07 07:46:37 +00:00
|
|
|
FormCitation::FormCitation(LyXView * lv, Dialogs * d)
|
2000-10-10 01:33:42 +00:00
|
|
|
: FormCommand(lv, d, _("Citation"), HIDE), dialog_(0)
|
2000-07-07 07:46:37 +00:00
|
|
|
{
|
|
|
|
// let the dialog be shown
|
|
|
|
// These are permanent connections so we won't bother
|
|
|
|
// storing a copy because we won't be disconnecting.
|
|
|
|
d->showCitation.connect(slot(this, &FormCitation::showInset));
|
|
|
|
d->createCitation.connect(slot(this, &FormCitation::createInset));
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
FormCitation::~FormCitation()
|
|
|
|
{
|
2000-08-01 17:33:32 +00:00
|
|
|
delete dialog_;
|
2000-07-07 07:46:37 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2000-10-03 05:53:25 +00:00
|
|
|
FL_FORM * FormCitation::form() const
|
|
|
|
{
|
|
|
|
if ( dialog_ ) return dialog_->form;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2000-08-03 12:56:25 +00:00
|
|
|
void FormCitation::clearStore()
|
|
|
|
{
|
|
|
|
citekeys.clear();
|
|
|
|
bibkeys.clear();
|
|
|
|
bibkeysInfo.clear();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2000-07-07 07:46:37 +00:00
|
|
|
void FormCitation::build()
|
|
|
|
{
|
2000-07-27 08:55:59 +00:00
|
|
|
dialog_ = build_citation();
|
2000-09-04 13:22:22 +00:00
|
|
|
min_wform = dialog_->form->w;
|
2000-07-07 07:46:37 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void FormCitation::update()
|
|
|
|
{
|
|
|
|
bibkeys.clear();
|
|
|
|
bibkeysInfo.clear();
|
|
|
|
|
|
|
|
vector<pair<string,string> > blist =
|
|
|
|
lv_->buffer()->getBibkeyList();
|
|
|
|
|
|
|
|
for( unsigned int i = 0; i < blist.size(); ++i ) {
|
|
|
|
bibkeys.push_back(blist[i].first);
|
|
|
|
bibkeysInfo.push_back(blist[i].second);
|
|
|
|
}
|
|
|
|
blist.clear();
|
|
|
|
|
2000-08-01 17:33:32 +00:00
|
|
|
citekeys.clear();
|
|
|
|
string tmp, keys( params.getContents() );
|
|
|
|
keys = frontStrip( split(keys, tmp, ',') );
|
|
|
|
while( !tmp.empty() ) {
|
|
|
|
citekeys.push_back( tmp );
|
|
|
|
keys = frontStrip( split(keys, tmp, ',') );
|
|
|
|
}
|
|
|
|
|
|
|
|
updateBrowser( dialog_->bibBrsr, bibkeys );
|
2000-07-07 07:46:37 +00:00
|
|
|
updateBrowser( dialog_->citeBrsr, citekeys );
|
|
|
|
fl_clear_browser( dialog_->infoBrsr );
|
|
|
|
|
|
|
|
// No keys have been selected yet, so...
|
|
|
|
setBibButtons( OFF );
|
|
|
|
setCiteButtons( OFF );
|
|
|
|
|
2000-10-03 05:53:25 +00:00
|
|
|
int noKeys = static_cast<int>( max( bibkeys.size(), citekeys.size() ) );
|
2000-07-07 07:46:37 +00:00
|
|
|
|
2000-08-14 05:24:35 +00:00
|
|
|
// Place bounds, so that 4 <= noKeys <= 10
|
2000-10-03 05:53:25 +00:00
|
|
|
noKeys = max(4, min(10, noKeys) );
|
2000-07-07 07:46:37 +00:00
|
|
|
|
|
|
|
// Re-size the form to accommodate the new browser size
|
|
|
|
int size = 20 * noKeys;
|
|
|
|
bool bibPresent = ( bibkeys.size() > 0 );
|
|
|
|
setSize( size, bibPresent );
|
|
|
|
|
2000-08-01 17:33:32 +00:00
|
|
|
fl_set_input( dialog_->textAftr, params.getOptions().c_str() );
|
2000-07-07 07:46:37 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void FormCitation::updateBrowser( FL_OBJECT * browser,
|
|
|
|
vector<string> const & keys ) const
|
|
|
|
{
|
|
|
|
fl_clear_browser( browser );
|
|
|
|
|
|
|
|
for( unsigned int i = 0; i < keys.size(); ++i )
|
|
|
|
fl_add_browser_line( browser, keys[i].c_str() );
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void FormCitation::setBibButtons( State status ) const
|
|
|
|
{
|
|
|
|
switch (status) {
|
|
|
|
case ON:
|
|
|
|
fl_activate_object( dialog_->addBtn );
|
|
|
|
fl_set_object_lcol( dialog_->addBtn, FL_BLACK );
|
|
|
|
break;
|
|
|
|
|
|
|
|
case OFF:
|
|
|
|
fl_deactivate_object( dialog_->addBtn );
|
|
|
|
fl_set_object_lcol( dialog_->addBtn, FL_INACTIVE );
|
|
|
|
break;
|
|
|
|
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void FormCitation::setCiteButtons( State status ) const
|
|
|
|
{
|
|
|
|
switch( status ) {
|
|
|
|
case ON:
|
|
|
|
{
|
|
|
|
fl_activate_object( dialog_->delBtn );
|
|
|
|
fl_set_object_lcol( dialog_->delBtn, FL_BLACK );
|
|
|
|
|
|
|
|
int sel = fl_get_browser( dialog_->citeBrsr );
|
|
|
|
|
2000-10-03 05:53:25 +00:00
|
|
|
if ( sel != 1 ) {
|
2000-07-07 07:46:37 +00:00
|
|
|
fl_activate_object( dialog_->upBtn );
|
|
|
|
fl_set_object_lcol( dialog_->upBtn, FL_BLACK );
|
|
|
|
} else {
|
|
|
|
fl_deactivate_object( dialog_->upBtn );
|
|
|
|
fl_set_object_lcol( dialog_->upBtn, FL_INACTIVE );
|
|
|
|
}
|
|
|
|
|
2000-10-03 05:53:25 +00:00
|
|
|
if ( sel != fl_get_browser_maxline(dialog_->citeBrsr)) {
|
2000-07-07 07:46:37 +00:00
|
|
|
fl_activate_object( dialog_->downBtn );
|
|
|
|
fl_set_object_lcol( dialog_->downBtn, FL_BLACK );
|
|
|
|
} else {
|
|
|
|
fl_deactivate_object( dialog_->downBtn );
|
|
|
|
fl_set_object_lcol( dialog_->downBtn, FL_INACTIVE );
|
|
|
|
}
|
|
|
|
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case OFF:
|
|
|
|
{
|
|
|
|
fl_deactivate_object( dialog_->delBtn );
|
|
|
|
fl_set_object_lcol( dialog_->delBtn, FL_INACTIVE );
|
|
|
|
|
|
|
|
fl_deactivate_object( dialog_->upBtn );
|
|
|
|
fl_set_object_lcol( dialog_->upBtn, FL_INACTIVE );
|
|
|
|
|
|
|
|
fl_deactivate_object( dialog_->downBtn );
|
|
|
|
fl_set_object_lcol( dialog_->downBtn, FL_INACTIVE );
|
|
|
|
}
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2000-08-01 17:33:32 +00:00
|
|
|
void FormCitation::setSize( int hbrsr, bool bibPresent ) const
|
2000-07-07 07:46:37 +00:00
|
|
|
{
|
2000-09-04 13:22:22 +00:00
|
|
|
bool const natbib = false; // will eventually be input
|
|
|
|
hbrsr = max( hbrsr, 175 ); // limit max size of cite/bib brsrs
|
|
|
|
|
|
|
|
// dh1, dh2, dh3 are the vertical separation between elements.
|
|
|
|
// These can be specified because the browser height is fixed
|
|
|
|
// so they are not changed by dynamic resizing
|
|
|
|
static int const dh1 = 30; // top of form to top of cite/bib brsrs;
|
|
|
|
// bottom of cite/bib brsrs to top of info;
|
|
|
|
// bottom of info to top next element;
|
|
|
|
// bottom of style to top textBefore;
|
|
|
|
// bottom of text to top ok/cancel buttons.
|
|
|
|
static int const dh2 = 10; // bottom of textBefore to top textAftr;
|
|
|
|
// bottom of ok/cancel buttons to bottom form
|
|
|
|
static int const dh3 = 5; // spacing between add/delete/... buttons.
|
|
|
|
|
|
|
|
int const wbrsr = dialog_->citeBrsr->w;
|
|
|
|
static int const hinfo = dialog_->infoBrsr->h;
|
|
|
|
static int const hstyle = dialog_->style->h;
|
|
|
|
static int const htext = dialog_->textAftr->h;
|
2000-10-03 05:53:25 +00:00
|
|
|
static int const hok = dialog_->button_ok->h;
|
2000-09-04 13:22:22 +00:00
|
|
|
|
|
|
|
int const wform = dialog_->form->w;
|
|
|
|
int hform = dh1 + hbrsr + dh1;
|
2000-10-03 05:53:25 +00:00
|
|
|
if ( bibPresent ) hform += hinfo + dh1;
|
|
|
|
if ( natbib ) hform += hstyle + dh1 + htext + dh2;
|
2000-09-04 13:22:22 +00:00
|
|
|
hform += htext + dh1 + hok + dh2;
|
|
|
|
|
|
|
|
bool const sizeSet = ( hform != dialog_->form->h );
|
2000-10-03 05:53:25 +00:00
|
|
|
if ( sizeSet ) fl_set_form_size( dialog_->form, wform, hform );
|
2000-09-04 13:22:22 +00:00
|
|
|
|
|
|
|
// No vertical resizing is allowed
|
|
|
|
// min_wform set in build()
|
|
|
|
fl_set_form_minsize( dialog_->form, min_wform, hform );
|
|
|
|
fl_set_form_maxsize( dialog_->form, 3*min_wform, hform );
|
|
|
|
|
2000-10-03 05:53:25 +00:00
|
|
|
if ( !sizeSet ) return;
|
2000-09-04 13:22:22 +00:00
|
|
|
|
|
|
|
int x = 0;
|
2000-08-01 17:33:32 +00:00
|
|
|
int y = 0;
|
2000-09-04 13:22:22 +00:00
|
|
|
fl_set_object_geometry( dialog_->box, x, y, wform, hform );
|
2000-07-19 08:37:26 +00:00
|
|
|
|
2000-09-04 13:22:22 +00:00
|
|
|
x = dialog_->citeBrsr->x;
|
|
|
|
y += dh1;
|
|
|
|
fl_set_object_geometry( dialog_->citeBrsr, x, y, wbrsr, hbrsr );
|
|
|
|
x = dialog_->bibBrsr->x;
|
|
|
|
fl_set_object_geometry( dialog_->bibBrsr, x, y, wbrsr, hbrsr );
|
2000-07-07 07:46:37 +00:00
|
|
|
|
2000-09-04 13:22:22 +00:00
|
|
|
x = dialog_->addBtn->x;
|
|
|
|
fl_set_object_position( dialog_->addBtn, x, y );
|
|
|
|
y += dh3 + dialog_->addBtn->h;
|
|
|
|
fl_set_object_position( dialog_->delBtn, x, y );
|
|
|
|
y += dh3 + dialog_->delBtn->h;
|
|
|
|
fl_set_object_position( dialog_->upBtn, x, y );
|
|
|
|
y += dh3 + dialog_->upBtn->h;
|
|
|
|
fl_set_object_position( dialog_->downBtn, x, y );
|
2000-07-07 07:46:37 +00:00
|
|
|
|
2000-09-04 13:22:22 +00:00
|
|
|
y = dh1 + hbrsr + dh1; // in position for next element
|
2000-07-07 07:46:37 +00:00
|
|
|
|
2000-10-03 05:53:25 +00:00
|
|
|
if ( bibPresent ) {
|
2000-09-04 13:22:22 +00:00
|
|
|
x = dialog_->infoBrsr->x;
|
|
|
|
fl_set_object_position( dialog_->infoBrsr, x, y );
|
2000-07-07 07:46:37 +00:00
|
|
|
fl_show_object( dialog_->infoBrsr );
|
2000-09-04 13:22:22 +00:00
|
|
|
y += hinfo + dh1;
|
|
|
|
} else
|
2000-07-07 07:46:37 +00:00
|
|
|
fl_hide_object( dialog_->infoBrsr );
|
|
|
|
|
2000-10-03 05:53:25 +00:00
|
|
|
if ( natbib ) {
|
2000-09-04 13:22:22 +00:00
|
|
|
x = dialog_->style->x;
|
|
|
|
fl_set_object_position( dialog_->style, x, y );
|
|
|
|
fl_show_object( dialog_->style );
|
|
|
|
x = dialog_->textBefore->x;
|
|
|
|
y += hstyle + dh1;
|
|
|
|
fl_set_object_position( dialog_->textBefore, x, y );
|
|
|
|
fl_show_object( dialog_->textBefore );
|
|
|
|
y += htext + dh2;
|
|
|
|
} else {
|
|
|
|
fl_hide_object( dialog_->style );
|
|
|
|
fl_hide_object( dialog_->textBefore );
|
|
|
|
}
|
|
|
|
|
|
|
|
x = dialog_->textAftr->x;
|
|
|
|
fl_set_object_position( dialog_->textAftr, x, y );
|
2000-07-07 07:46:37 +00:00
|
|
|
|
2000-10-03 05:53:25 +00:00
|
|
|
x = dialog_->button_ok->x;
|
2000-09-04 13:22:22 +00:00
|
|
|
y += htext + dh1;
|
2000-10-03 05:53:25 +00:00
|
|
|
fl_set_object_position( dialog_->button_ok, x, y );
|
|
|
|
x = dialog_->button_cancel->x;
|
|
|
|
fl_set_object_position( dialog_->button_cancel, x, y );
|
2000-07-07 07:46:37 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2000-10-02 00:10:25 +00:00
|
|
|
#ifdef WITH_WARNINGS
|
|
|
|
#warning convert this to use the buttoncontroller
|
|
|
|
#endif
|
2000-10-05 07:57:00 +00:00
|
|
|
bool FormCitation::input( FL_OBJECT *, long data )
|
2000-07-07 07:46:37 +00:00
|
|
|
{
|
2000-10-05 07:57:00 +00:00
|
|
|
State cb = static_cast<State>( data );
|
2000-08-01 17:33:32 +00:00
|
|
|
|
2000-07-07 07:46:37 +00:00
|
|
|
switch( cb ) {
|
|
|
|
case BIBBRSR:
|
|
|
|
{
|
|
|
|
fl_deselect_browser( dialog_->citeBrsr );
|
|
|
|
|
|
|
|
unsigned int sel = fl_get_browser( dialog_->bibBrsr );
|
2000-10-03 05:53:25 +00:00
|
|
|
if ( sel < 1 || sel > bibkeys.size() ) break;
|
2000-07-07 07:46:37 +00:00
|
|
|
|
|
|
|
// Put into infoBrsr the additional info associated with
|
|
|
|
// the selected bibBrsr key
|
|
|
|
fl_clear_browser( dialog_->infoBrsr );
|
|
|
|
fl_add_browser_line( dialog_->infoBrsr,
|
|
|
|
bibkeysInfo[sel-1].c_str() );
|
|
|
|
|
|
|
|
// Highlight the selected bibBrsr key in citeBrsr if present
|
|
|
|
vector<string>::iterator it =
|
|
|
|
find( citekeys.begin(), citekeys.end(), bibkeys[sel-1] );
|
|
|
|
|
2000-10-03 05:53:25 +00:00
|
|
|
if ( it != citekeys.end() ) {
|
|
|
|
int n = static_cast<int>( it - citekeys.begin() );
|
2000-07-07 07:46:37 +00:00
|
|
|
fl_select_browser_line( dialog_->citeBrsr, n+1 );
|
|
|
|
fl_set_browser_topline( dialog_->citeBrsr, n+1 );
|
|
|
|
}
|
|
|
|
|
2000-10-03 05:53:25 +00:00
|
|
|
if ( !lv_->buffer()->isReadonly() ) {
|
|
|
|
if ( it != citekeys.end() ) {
|
2000-07-07 07:46:37 +00:00
|
|
|
setBibButtons( OFF );
|
|
|
|
setCiteButtons( ON );
|
|
|
|
} else {
|
|
|
|
setBibButtons( ON );
|
|
|
|
setCiteButtons( OFF );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case CITEBRSR:
|
|
|
|
{
|
|
|
|
unsigned int sel = fl_get_browser( dialog_->citeBrsr );
|
2000-10-03 05:53:25 +00:00
|
|
|
if ( sel < 1 || sel > citekeys.size() ) break;
|
2000-07-07 07:46:37 +00:00
|
|
|
|
2000-10-03 05:53:25 +00:00
|
|
|
if ( !lv_->buffer()->isReadonly() ) {
|
2000-07-07 07:46:37 +00:00
|
|
|
setBibButtons( OFF );
|
|
|
|
setCiteButtons( ON );
|
|
|
|
}
|
|
|
|
|
|
|
|
// Highlight the selected citeBrsr key in bibBrsr
|
|
|
|
vector<string>::iterator it =
|
|
|
|
find( bibkeys.begin(), bibkeys.end(), citekeys[sel-1] );
|
|
|
|
|
|
|
|
if (it != bibkeys.end()) {
|
2000-10-03 05:53:25 +00:00
|
|
|
int n = static_cast<int>( it - bibkeys.begin() );
|
2000-07-07 07:46:37 +00:00
|
|
|
fl_select_browser_line( dialog_->bibBrsr, n+1 );
|
|
|
|
fl_set_browser_topline( dialog_->bibBrsr, n+1 );
|
|
|
|
|
|
|
|
// Put into infoBrsr the additional info associated with
|
|
|
|
// the selected citeBrsr key
|
|
|
|
fl_clear_browser( dialog_->infoBrsr );
|
|
|
|
fl_add_browser_line( dialog_->infoBrsr,
|
|
|
|
bibkeysInfo[n].c_str() );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case ADD:
|
|
|
|
{
|
2000-10-03 05:53:25 +00:00
|
|
|
if ( lv_->buffer()->isReadonly() ) break;
|
2000-07-07 07:46:37 +00:00
|
|
|
|
|
|
|
unsigned int sel = fl_get_browser( dialog_->bibBrsr );
|
2000-10-03 05:53:25 +00:00
|
|
|
if ( sel < 1 || sel > bibkeys.size() ) break;
|
2000-07-07 07:46:37 +00:00
|
|
|
|
|
|
|
// Add the selected bibBrsr key to citeBrsr
|
|
|
|
fl_addto_browser( dialog_->citeBrsr,
|
|
|
|
bibkeys[sel-1].c_str() );
|
|
|
|
citekeys.push_back( bibkeys[sel-1] );
|
|
|
|
|
2000-10-03 05:53:25 +00:00
|
|
|
int n = static_cast<int>( citekeys.size() );
|
2000-07-07 07:46:37 +00:00
|
|
|
fl_select_browser_line( dialog_->citeBrsr, n );
|
|
|
|
|
|
|
|
setBibButtons( OFF );
|
|
|
|
setCiteButtons( ON );
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case DELETE:
|
|
|
|
{
|
2000-10-03 05:53:25 +00:00
|
|
|
if ( lv_->buffer()->isReadonly() ) break;
|
2000-07-07 07:46:37 +00:00
|
|
|
|
|
|
|
unsigned int sel = fl_get_browser( dialog_->citeBrsr );
|
2000-10-03 05:53:25 +00:00
|
|
|
if ( sel < 1 || sel > citekeys.size() ) break;
|
2000-07-07 07:46:37 +00:00
|
|
|
|
|
|
|
// Remove the selected key from citeBrsr
|
|
|
|
fl_delete_browser_line( dialog_->citeBrsr, sel ) ;
|
|
|
|
citekeys.erase( citekeys.begin() + sel-1 );
|
|
|
|
|
|
|
|
setBibButtons( ON );
|
|
|
|
setCiteButtons( OFF );
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case UP:
|
|
|
|
{
|
2000-10-03 05:53:25 +00:00
|
|
|
if ( lv_->buffer()->isReadonly() ) break;
|
2000-07-07 07:46:37 +00:00
|
|
|
|
|
|
|
unsigned int sel = fl_get_browser( dialog_->citeBrsr );
|
2000-10-03 05:53:25 +00:00
|
|
|
if ( sel < 2 || sel > citekeys.size() ) break;
|
2000-07-07 07:46:37 +00:00
|
|
|
|
|
|
|
// Move the selected key up one line
|
|
|
|
vector<string>::iterator it = citekeys.begin() + sel-1;
|
|
|
|
string tmp = *it;
|
|
|
|
|
|
|
|
fl_delete_browser_line( dialog_->citeBrsr, sel );
|
|
|
|
citekeys.erase( it );
|
|
|
|
|
|
|
|
fl_insert_browser_line( dialog_->citeBrsr, sel-1, tmp.c_str() );
|
|
|
|
fl_select_browser_line( dialog_->citeBrsr, sel-1 );
|
|
|
|
citekeys.insert( it-1, tmp );
|
|
|
|
setCiteButtons( ON );
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case DOWN:
|
|
|
|
{
|
2000-10-03 05:53:25 +00:00
|
|
|
if ( lv_->buffer()->isReadonly() ) break;
|
2000-07-07 07:46:37 +00:00
|
|
|
|
|
|
|
unsigned int sel = fl_get_browser( dialog_->citeBrsr );
|
2000-10-03 05:53:25 +00:00
|
|
|
if ( sel < 1 || sel > citekeys.size()-1 ) break;
|
2000-07-07 07:46:37 +00:00
|
|
|
|
|
|
|
// Move the selected key down one line
|
|
|
|
vector<string>::iterator it = citekeys.begin() + sel-1;
|
|
|
|
string tmp = *it;
|
|
|
|
|
|
|
|
fl_delete_browser_line( dialog_->citeBrsr, sel );
|
|
|
|
citekeys.erase( it );
|
|
|
|
|
|
|
|
fl_insert_browser_line( dialog_->citeBrsr, sel+1, tmp.c_str() );
|
|
|
|
fl_select_browser_line( dialog_->citeBrsr, sel+1 );
|
|
|
|
citekeys.insert( it+1, tmp );
|
|
|
|
setCiteButtons( ON );
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
2000-10-02 00:10:25 +00:00
|
|
|
return true;
|
2000-07-07 07:46:37 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void FormCitation::apply()
|
|
|
|
{
|
2000-10-03 05:53:25 +00:00
|
|
|
if (lv_->buffer()->isReadonly()) return;
|
2000-07-07 07:46:37 +00:00
|
|
|
|
2000-07-27 08:55:59 +00:00
|
|
|
string contents;
|
2000-09-19 11:18:35 +00:00
|
|
|
for(unsigned int i = 0; i < citekeys.size(); ++i) {
|
2000-07-27 08:55:59 +00:00
|
|
|
if (i > 0) contents += ", ";
|
|
|
|
contents += citekeys[i];
|
2000-07-07 07:46:37 +00:00
|
|
|
}
|
|
|
|
|
2000-09-19 11:18:35 +00:00
|
|
|
params.setContents(contents);
|
|
|
|
params.setOptions(fl_get_input(dialog_->textAftr));
|
2000-07-07 07:46:37 +00:00
|
|
|
|
2000-09-19 11:18:35 +00:00
|
|
|
if (inset_ != 0) {
|
2000-08-01 17:33:32 +00:00
|
|
|
// Only update if contents have changed
|
2000-10-03 05:53:25 +00:00
|
|
|
if (params != inset_->params()) {
|
2000-09-19 11:18:35 +00:00
|
|
|
inset_->setParams(params);
|
|
|
|
lv_->view()->updateInset(inset_, true);
|
2000-08-01 17:33:32 +00:00
|
|
|
}
|
2000-07-07 07:46:37 +00:00
|
|
|
} else {
|
2000-09-19 11:18:35 +00:00
|
|
|
lv_->getLyXFunc()->Dispatch(LFUN_CITATION_INSERT,
|
|
|
|
params.getAsString());
|
2000-07-07 07:46:37 +00:00
|
|
|
}
|
|
|
|
}
|