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