62
63
#include <commentwidget.h>
63
64
#include <entrywidget.h>
64
65
#include <fileimporterbibtex.h>
65
#ifdef HAVE_LIBBIBUTILS
66
66
#include <fileimporterbibutils.h>
67
#else // HAVE_LIBBIBUTILS
68
67
#include <fileimporterris.h>
69
#endif // HAVE_LIBBIBUTILS
70
68
#include <fileexporterbibtex.h>
71
#ifdef HAVE_LIBBIBUTILS
72
69
#include <fileexporterbibutils.h>
73
#else // HAVE_LIBBIBUTILS
74
70
#include <fileexporterris.h>
75
#endif // HAVE_LIBBIBUTILS
76
71
#include <fileexporterxml.h>
77
72
#include <fileexporterrtf.h>
73
#include <fileexporterdocbook5.h>
78
74
#include <fileexporterpdf.h>
79
75
#include <fileexporterps.h>
80
76
#include <fileexporterxslt.h>
260
266
format = BibTeX::File::formatPDF;
261
267
else if ( fileName.endsWith( ".bib", FALSE ) )
262
268
format = BibTeX::File::formatBibTeX;
263
#ifdef HAVE_LIBBIBUTILS
264
else if ( fileName.endsWith( ".ref", FALSE ) || fileName.endsWith( ".refer", FALSE ) || fileName.endsWith( ".txt", FALSE ) || fileName.endsWith( ".rfr", FALSE ) )
269
else if ( settings->external_xml2bibAvailable && settings->external_end2xmlAvailable && ( fileName.endsWith( ".ref", FALSE ) || fileName.endsWith( ".refer", FALSE ) || fileName.endsWith( ".txt", FALSE ) || fileName.endsWith( ".rfr", FALSE ) ) )
265
270
format = BibTeX::File::formatEndNote;
266
else if ( fileName.endsWith( ".isi", FALSE ) || fileName.endsWith( ".cgi", FALSE ) )
271
else if ( settings->external_xml2bibAvailable && settings->external_end2xmlAvailable && ( fileName.endsWith( ".isi", FALSE ) || fileName.endsWith( ".cgi", FALSE ) ) )
267
272
format = BibTeX::File::formatISI;
269
273
else if ( fileName.endsWith( ".ris", FALSE ) )
270
274
format = BibTeX::File::formatRIS;
271
275
else if ( fileName.endsWith( ".ps", FALSE ) )
272
276
format = BibTeX::File::formatPS;
273
277
else if ( fileName.endsWith( ".xml", FALSE ) )
274
format = BibTeX::File::formatXML;
279
QStringList options = QStringList::split( '|', ( settings->external_xml2bibAvailable && settings->external_end2xmlAvailable ? "DocBook5|MODS|internal XML" : "DocBook5|internal XML" ) );
281
QString answer = KInputDialog::getItem( i18n( "Choose file format" ), QString( i18n( "Choose file format of file '%1':" ) ).arg( fileName ), options, 0, false, &ok, this );
282
if ( ok && !answer.isNull() && answer == "DocBook5" )
283
format = BibTeX::File::formatDocBook5;
284
else if ( ok && !answer.isNull() && answer == "MODS" )
285
format = BibTeX::File::formatMODS;
286
else if ( ok && !answer.isNull() && answer == "internal XML" )
287
format = BibTeX::File::formatXML;
275
289
else if ( fileName.endsWith( ".html", FALSE ) || fileName.endsWith( ".xhtml", FALSE ) || fileName.endsWith( ".htm", FALSE ) )
276
290
format = BibTeX::File::formatHTML;
313
327
switch ( format )
315
329
case BibTeX::File::formatBibTeX:
317
BibTeX::FileExporterBibTeX * bibtexExporter = new BibTeX::FileExporterBibTeX();
318
bibtexExporter->setStringDelimiter( settings->fileIO_BibtexStringOpenDelimiter, settings->fileIO_BibtexStringCloseDelimiter );
319
bibtexExporter->setKeywordCasing( settings->fileIO_KeywordCasing );
320
bibtexExporter->setEncoding( settings->fileIO_Encoding );
321
bibtexExporter->setEnclosingCurlyBrackets( settings->fileIO_EnclosingCurlyBrackets );
322
exporter = bibtexExporter;
325
#ifdef HAVE_LIBBIBUTILS
331
BibTeX::FileExporterBibTeX * bibtexExporter = new BibTeX::FileExporterBibTeX();
332
bibtexExporter->setStringDelimiter( settings->fileIO_BibtexStringOpenDelimiter, settings->fileIO_BibtexStringCloseDelimiter );
333
bibtexExporter->setKeywordCasing( settings->fileIO_KeywordCasing );
334
bibtexExporter->setEncoding( settings->fileIO_Encoding );
335
bibtexExporter->setEnclosingCurlyBrackets( settings->fileIO_EnclosingCurlyBrackets );
336
exporter = bibtexExporter;
326
339
case BibTeX::File::formatRIS:
327
exporter = new BibTeX::FileExporterBibUtils( BibTeX::FileExporterBibUtils::ofRIS );
340
if ( settings->external_xml2bibAvailable && settings->external_end2xmlAvailable && settings->fileIO_useBibUtils )
341
exporter = new BibTeX::FileExporterBibUtils( BibTeX::File::formatRIS );
343
exporter = new BibTeX::FileExporterRIS( );
329
345
case BibTeX::File::formatEndNote:
330
exporter = new BibTeX::FileExporterBibUtils( BibTeX::FileExporterBibUtils::ofEndNote );
346
case BibTeX::File::formatEndNoteXML:
347
case BibTeX::File::formatMODS:
332
348
case BibTeX::File::formatISI:
333
exporter = new BibTeX::FileExporterBibUtils( BibTeX::FileExporterBibUtils::ofISI );
336
case BibTeX::File::formatRIS:
337
exporter = new BibTeX::FileExporterRIS( );
349
if ( settings->external_xml2bibAvailable && settings->external_end2xmlAvailable )
350
exporter = new BibTeX::FileExporterBibUtils( format );
340
352
case BibTeX::File::formatXML:
341
353
exporter = new BibTeX::FileExporterXML();
346
358
case BibTeX::FileExporterExternal::exporterNone:
347
359
case BibTeX::FileExporterExternal::exporterXSLT:
349
KStandardDirs * kstd = KGlobal::dirs();
350
QString resPath = kstd->findResource( "data", "kbibtexpart/xslt/html.xsl" );
351
if ( resPath != NULL )
352
transform = new BibTeX::XSLTransform( resPath );
361
KStandardDirs * kstd = KGlobal::dirs();
362
QString resPath = kstd->findResource( "data", "kbibtexpart/xslt/html.xsl" );
363
if ( resPath != NULL )
364
transform = new BibTeX::XSLTransform( resPath );
354
if ( transform != NULL )
355
exporter = new BibTeX::FileExporterXSLT( transform );
358
kdDebug() << "XSLT for HTML export is not available" << endl;
366
if ( transform != NULL )
367
exporter = new BibTeX::FileExporterXSLT( transform );
370
kdDebug() << "XSLT for HTML export is not available" << endl;
364
exporter = new BibTeX::FileExporterExternal( settings->fileIO_ExporterHTML, BibTeX::File::formatHTML );
376
exporter = new BibTeX::FileExporterExternal( settings->fileIO_ExporterHTML, BibTeX::File::formatHTML );
368
380
case BibTeX::File::formatRTF:
370
if ( !settings->external_latex2rtfAvailable )
372
QString msg = i18n( "To export a BibTeX document to the Rich Text Format (RTF) you need to have installed the program latex2rtf." ) ;
373
KMessageBox::information( this, msg );
374
errorLog->append( msg );
382
if ( !settings->external_latex2rtfAvailable )
384
QString msg = i18n( "To export a BibTeX document to the Rich Text Format (RTF) KBibTeX requires the program 'latex2rtf'." ) ;
385
KMessageBox::information( this, msg );
386
errorLog->append( msg );
378
390
BibTeX::FileExporterRTF *rtfExporter = new BibTeX::FileExporterRTF();
379
391
rtfExporter->setLaTeXLanguage( settings->fileIO_ExportLanguage );
380
392
rtfExporter->setLaTeXBibliographyStyle( settings->fileIO_ExportBibliographyStyle );
381
393
exporter = rtfExporter;
397
case BibTeX::File::formatDocBook5:
399
if ( settings->fileIO_bib2db5ClassPath == QString::null )
401
QString msg = i18n( "To export a BibTeX document to the DocBook5 format KBibTeX requires the program 'bib2db5'." ) ;
402
KMessageBox::information( this, msg );
403
errorLog->append( msg );
407
BibTeX::FileExporterDocBook5 *db5Exporter = new BibTeX::FileExporterDocBook5( settings->fileIO_bib2db5ClassPath );
408
exporter = db5Exporter;
384
412
case BibTeX::File::formatPDF:
414
if ( settings->fileIO_EmbedFiles && !Settings::kpsewhich( "embedfile.sty" ) )
386
if ( settings->fileIO_EmbedFiles && !Settings::kpsewhich( "embedfile.sty" ) )
388
KMessageBox::sorry( this, i18n( "Embedding files into the PDF file is enabled, but the required file 'embedfile.sty' was not found. Embedding files will be disabled." ), i18n( "Embedding files disabled" ) );
389
settings->fileIO_EmbedFiles = FALSE;
416
KMessageBox::sorry( this, i18n( "Embedding files into the PDF file is enabled, but the required file 'embedfile.sty' was not found. Embedding files will be disabled." ), i18n( "Embedding files disabled" ) );
417
settings->fileIO_EmbedFiles = FALSE;
392
BibTeX::FileExporterPDF *pdfExporter = new BibTeX::FileExporterPDF( settings->fileIO_EmbedFiles );
393
pdfExporter->setLaTeXLanguage( settings->fileIO_ExportLanguage );
394
pdfExporter->setLaTeXBibliographyStyle( settings->fileIO_ExportBibliographyStyle );
395
QStringList searchPaths;
396
searchPaths.append( settings->editing_DocumentSearchPath );
397
if ( m_bibtexfile->fileName != QString::null )
398
searchPaths.append( KURL( m_bibtexfile->fileName ).directory( FALSE, FALSE ) );
399
pdfExporter->setDocumentSearchPaths( searchPaths );
400
exporter = pdfExporter;
420
BibTeX::FileExporterPDF *pdfExporter = new BibTeX::FileExporterPDF( settings->fileIO_EmbedFiles );
421
pdfExporter->setLaTeXLanguage( settings->fileIO_ExportLanguage );
422
pdfExporter->setLaTeXBibliographyStyle( settings->fileIO_ExportBibliographyStyle );
423
QStringList searchPaths;
424
for ( QStringList::Iterator it = settings->editing_DocumentSearchPaths.begin(); it != settings->editing_DocumentSearchPaths.end(); ++it )
425
searchPaths.append( *it );
426
if ( m_bibtexfile->fileName != QString::null )
427
searchPaths.append( KURL( m_bibtexfile->fileName ).directory( FALSE, FALSE ) );
428
pdfExporter->setDocumentSearchPaths( searchPaths );
429
exporter = pdfExporter;
403
432
case BibTeX::File::formatPS:
405
BibTeX::FileExporterPS *psExporter = new BibTeX::FileExporterPS();
406
psExporter->setLaTeXLanguage( settings->fileIO_ExportLanguage );
407
psExporter->setLaTeXBibliographyStyle( settings->fileIO_ExportBibliographyStyle );
408
exporter = psExporter;
434
BibTeX::FileExporterPS *psExporter = new BibTeX::FileExporterPS();
435
psExporter->setLaTeXLanguage( settings->fileIO_ExportLanguage );
436
psExporter->setLaTeXBibliographyStyle( settings->fileIO_ExportBibliographyStyle );
437
exporter = psExporter;
412
441
kdDebug() << "Unsupported export format selected" << endl;
671
702
QStringList fileKeywords;
674
* Fetch keywords from current entry into entryKeywords list
705
* Fetch keywords from selected entries into entryKeywords list
676
QListViewItem * item = m_listViewElements->selectedItem();
678
item = m_listViewElements->currentItem();
679
DocumentListViewItem * dlvi = dynamic_cast<DocumentListViewItem*>( item );
680
BibTeX::Element * currentElement = NULL;
681
BibTeX::Entry *entry = NULL;
682
BibTeX::EntryField *field = NULL;
683
BibTeX::Value * valueKeywords = NULL;
684
if ( dlvi != NULL && ( currentElement = dlvi->element() ) != NULL && ( entry = dynamic_cast<BibTeX::Entry*>( currentElement ) ) != NULL && ( field = entry->getField( BibTeX::EntryField::ftKeywords ) ) != NULL && ( valueKeywords = field->value() ) != NULL )
685
for ( QValueList<BibTeX::ValueItem*>::ConstIterator it = valueKeywords->items.begin();it != valueKeywords->items.end();++it )
707
QValueList<BibTeX::Entry*> entryList;
708
for ( QListViewItemIterator it( m_listViewElements, QListViewItemIterator::Selected ); it.current(); ++it )
710
BibTeX::Element * currentElement = NULL;
711
DocumentListViewItem * dlvi = dynamic_cast<DocumentListViewItem*>( it.current() );
712
if ( dlvi && (( currentElement = dlvi->element() ) != NULL ) )
687
BibTeX::KeywordContainer *container = dynamic_cast<BibTeX::KeywordContainer*>( *it );
688
if ( container != NULL )
689
for ( QValueList<BibTeX::Keyword*>::ConstIterator kit = container->keywords.begin();kit != container->keywords.end();++kit )
690
entryKeywords.append(( *kit )->text() );
714
BibTeX::Entry *entry = dynamic_cast<BibTeX::Entry*>( currentElement );
720
for ( QValueList<BibTeX::Entry*>::Iterator it = entryList.begin(); it != entryList.end(); ++it )
722
BibTeX::Entry *entry = *it;
723
BibTeX::EntryField *field = NULL;
724
BibTeX::Value *valueKeywords = NULL;
725
if (( field = entry->getField( BibTeX::EntryField::ftKeywords ) ) != NULL && ( valueKeywords = field->value() ) != NULL )
726
for ( QValueList<BibTeX::ValueItem*>::ConstIterator it = valueKeywords->items.begin();it != valueKeywords->items.end();++it )
728
BibTeX::KeywordContainer *container = dynamic_cast<BibTeX::KeywordContainer*>( *it );
729
if ( container != NULL )
730
for ( QValueList<BibTeX::Keyword*>::ConstIterator kit = container->keywords.begin();kit != container->keywords.end();++kit )
731
entryKeywords.append(( *kit )->text() );
694
736
* Fetch all keywords from current file into fileKeywords
839
881
BibTeX::Entry *entry = dynamic_cast<BibTeX::Entry*>( item->element() );
840
882
if ( entry != NULL )
842
QStringList urls = entry->urls();
843
for ( QStringList::Iterator it = urls.begin(); it != urls.end(); ++it )
884
/** prefer local urls over remote urls, so first check for file:// and use other protocols only if no file:// was found */
885
QString protocol = "file";
886
KURL::List urls = getEntryURLs( entry );
887
KURL selected = KURL();
888
while ( !selected.isValid() && protocol != QString::null )
845
KURL url = KURL( *it );
846
if ( url.isValid() && ( !url.isLocalFile() || QFile::exists( url.path() ) ) )
890
for ( KURL::List::Iterator it = urls.begin(); !selected.isValid() && it != urls.end(); ++it )
848
new KRun( url, this );
849
openingDocumentOK = TRUE;
893
if ( url.isValid() && ( !url.isLocalFile() || QFile::exists( url.path() ) ) && url.protocol().startsWith( protocol ) )
896
/** little trick setting protocol prefix in the first round to "file://", then to "", and setting to null to quit the loop */
897
if ( !protocol.isEmpty() ) protocol = "";
898
else protocol = QString::null;
901
if ( selected.isValid() )
903
new KRun( selected, this );
904
openingDocumentOK = TRUE;
857
910
editElement( item );
860
void DocumentWidget::editElement()
913
bool DocumentWidget::editElement()
862
916
QListViewItem * item = m_listViewElements->selectedItem();
863
917
if ( item == NULL )
864
918
item = m_listViewElements->currentItem();
865
919
DocumentListViewItem * dlvi = dynamic_cast<DocumentListViewItem*>( item );
921
result = editElement( dlvi );
870
void DocumentWidget::editElement( DocumentListViewItem*item )
925
bool DocumentWidget::editElement( DocumentListViewItem*item )
872
927
BibTeX::Element * element = item->element();
873
editElement( element );
928
bool result = editElement( element );
932
slotPreviewElement( item );
877
void DocumentWidget::editElement( BibTeX::Element*element )
937
bool DocumentWidget::editElement( BibTeX::Element*element )
879
939
m_dirWatch.stopScan();
880
editElementDialog( element );
940
bool result = editElementDialog( element );
881
941
m_dirWatch.startScan( );
883
943
Settings * settings = Settings::self( m_bibtexfile );
884
944
settings->addToCompletion( element );
885
945
m_sideBar->refreshLists( m_bibtexfile );
888
950
bool DocumentWidget::editElementDialog( BibTeX::Element *element )
933
995
if ( m_editMode == emList )
935
997
QValueList<BibTeX::Element*> elements = m_listViewElements->selectedItems();
936
QStringList refsToSend;
938
for ( QValueList<BibTeX::Element*>::Iterator it = elements.begin(); it != elements.end(); ++it )
940
BibTeX::Entry *entry = dynamic_cast<BibTeX::Entry*>( *it );
941
if ( entry != NULL ) refsToSend.append( entry->id() );
998
QString genericMsg = i18n( "\n\nEither LyX is not running or has not been correctly configured to send references to." );
999
QString title = i18n( "Error communicating with LyX" );
944
1001
Settings * settings = Settings::self( m_bibtexfile );
945
1002
QString lyxPipeFilename = settings->detectLyXInPipe();
946
1003
kdDebug() << "sendSelectedToLyx: lyxPipeFilename= " << lyxPipeFilename << endl;
947
QFile pipe( lyxPipeFilename );
948
if ( pipe.exists() && pipe.open( IO_WriteOnly ) )
1005
if ( lyxPipeFilename.isNull() )
1006
KMessageBox::error( this, i18n( "Cannot determine how to send references to LyX." ).append( genericMsg ), title );
950
QTextStream * writer = new QTextStream( &pipe );
951
QString msg = "LYXCMD:kbibtex:citation-insert:" + refsToSend.join( "," );
952
*writer << msg << endl;
1009
QFile pipe( lyxPipeFilename );
1010
if ( !pipe.exists() )
1011
KMessageBox::error( this, i18n( "The inpipe as configured in LyX does not exist." ).append( genericMsg ), title );
1014
if ( !pipe.open( IO_WriteOnly ) )
1015
KMessageBox::error( this, i18n( "Cannot open the inpipe as configured in LyX." ).append( genericMsg ), title );
1018
QStringList refsToSend;
1019
for ( QValueList<BibTeX::Element*>::Iterator it = elements.begin(); it != elements.end(); ++it )
1021
BibTeX::Entry *entry = dynamic_cast<BibTeX::Entry*>( *it );
1022
if ( entry != NULL ) refsToSend.append( entry->id() );
1025
QTextStream * writer = new QTextStream( &pipe );
1026
QString msg = "LYXCMD:kbibtex:citation-insert:" + refsToSend.join( "," );
1027
*writer << msg << endl;
957
KMessageBox::error( this, ( lyxPipeFilename.isEmpty() ? i18n( "Cannot establish a link to LyX" ) : QString( i18n( "Cannot establish a link to LyX using the pipe '%1'" ) ).arg( lyxPipeFilename ) ) + i18n( "\nMaybe LyX is not running?" ), i18n( "Error communicating with LyX" ) );
1236
1325
BibTeX::FileImporter *DocumentWidget::fileImporterFactory( const QString &fileName )
1327
Settings * settings = Settings::self( NULL );
1238
1328
BibTeX::FileImporter * importer = NULL;
1239
1329
BibTeX::File::FileFormat format = BibTeX::File::formatUndefined;
1241
1331
if ( fileName.endsWith( ".bib", FALSE ) )
1242
1332
format = BibTeX::File::formatBibTeX;
1243
#ifdef HAVE_LIBBIBUTILS
1244
else if ( fileName.endsWith( ".ref", FALSE ) || fileName.endsWith( ".refer", FALSE ) || fileName.endsWith( ".txt", FALSE ) || fileName.endsWith( ".rfr", FALSE ) )
1333
else if ( settings->external_xml2bibAvailable && settings->external_end2xmlAvailable && ( fileName.endsWith( ".ref", FALSE ) || fileName.endsWith( ".refer", FALSE ) || fileName.endsWith( ".txt", FALSE ) || fileName.endsWith( ".rfr", FALSE ) ) )
1245
1334
format = BibTeX::File::formatEndNote;
1246
else if ( fileName.endsWith( ".isi", FALSE ) || fileName.endsWith( ".cgi", FALSE ) )
1335
else if ( settings->external_xml2bibAvailable && settings->external_end2xmlAvailable && ( fileName.endsWith( ".isi", FALSE ) || fileName.endsWith( ".cgi", FALSE ) ) )
1247
1336
format = BibTeX::File::formatISI;
1248
#endif // HAVE_LIBBIBUTILS
1249
1337
else if ( fileName.endsWith( ".ris", FALSE ) )
1250
1338
format = BibTeX::File::formatRIS;
1339
else if ( fileName.endsWith( ".xml", FALSE ) )
1341
QStringList options = QStringList::split( '|', ( settings->external_xml2bibAvailable && settings->external_end2xmlAvailable ? "MODS|EndNote XML|internal XML" : "internal XML" ) );
1343
QString answer = KInputDialog::getItem( i18n( "Choose file format" ), QString( i18n( "Choose file format of file '%1':" ) ).arg( fileName ), options, 0, false, &ok, this );
1344
if ( ok && !answer.isNull() && answer == "DocBook5" )
1345
format = BibTeX::File::formatDocBook5;
1346
else if ( ok && !answer.isNull() && answer == "MODS" )
1347
format = BibTeX::File::formatMODS;
1348
else if ( ok && !answer.isNull() && answer == "EndNote XML" )
1349
format = BibTeX::File::formatEndNoteXML;
1350
else if ( ok && !answer.isNull() && answer == "internal XML" )
1351
format = BibTeX::File::formatXML;
1355
QStringList options = QStringList::split( '|', ( settings->external_xml2bibAvailable && settings->external_end2xmlAvailable ? "BibTeX|EndNote|ISI|RIS" : "BibTeX|RIS" ) );
1357
QString answer = KInputDialog::getItem( i18n( "Choose file format" ), QString( i18n( "Choose file format of file '%1':" ) ).arg( fileName ), options, 0, false, &ok, this );
1358
if ( ok && !answer.isNull() && answer == "BibTeX" )
1359
format = BibTeX::File::formatBibTeX;
1360
else if ( ok && !answer.isNull() && answer == "EndNote" )
1361
format = BibTeX::File::formatEndNote;
1362
else if ( ok && !answer.isNull() && answer == "ISI" )
1363
format = BibTeX::File::formatISI;
1364
else if ( ok && !answer.isNull() && answer == "RIS" )
1365
format = BibTeX::File::formatRIS;
1252
1368
if ( format != BibTeX::File::formatUndefined )
1370
Settings * settings = Settings::self( NULL );
1254
1371
switch ( format )
1256
1373
case BibTeX::File::formatBibTeX:
1258
Settings * settings = Settings::self( NULL );
1259
importer = new BibTeX::FileImporterBibTeX( settings->editing_FirstNameFirst );
1375
Settings * settings = Settings::self( NULL );
1376
importer = new BibTeX::FileImporterBibTeX( settings->editing_FirstNameFirst, settings->fileIO_Encoding );
1379
case BibTeX::File::formatRIS:
1381
if ( settings->external_xml2bibAvailable && settings->external_end2xmlAvailable && settings->fileIO_useBibUtils )
1382
importer = new BibTeX::FileImporterBibUtils( BibTeX::File::formatRIS );
1384
importer = new BibTeX::FileImporterRIS( );
1262
#ifdef HAVE_LIBBIBUTILS
1263
1387
case BibTeX::File::formatEndNote:
1264
importer = new BibTeX::FileImporterBibUtils( BibTeX::FileImporterBibUtils::ifEndNote );
1266
case BibTeX::File::formatRIS:
1267
importer = new BibTeX::FileImporterBibUtils( BibTeX::FileImporterBibUtils::ifRIS );
1388
case BibTeX::File::formatEndNoteXML:
1269
1389
case BibTeX::File::formatISI:
1270
importer = new BibTeX::FileImporterBibUtils( BibTeX::FileImporterBibUtils::ifISI );
1273
case BibTeX::File::formatRIS:
1274
importer = new BibTeX::FileImporterRIS( );
1390
case BibTeX::File::formatMODS:
1391
if ( settings->external_xml2bibAvailable && settings->external_end2xmlAvailable )
1392
importer = new BibTeX::FileImporterBibUtils( format );
1279
KMessageBox::sorry( this, QString( i18n( "The file '%1' does not contain a known type of bibliography." ) ).arg( fileName ), i18n( "Unknown file format" ) );
1396
KMessageBox::sorry( this, QString( i18n( "The file '%1' does not contain a known type of bibliography." ) ).arg( fileName ), i18n( "Unknown file format" ) );
1441
1560
new KRun( m_viewDocumentActionMenuURLs[ m_viewDocumentActionMenu->popupMenu() ->indexOf( id )], this );
1563
void DocumentWidget::slotViewFirstDocument()
1565
for ( QStringList::Iterator it = m_viewDocumentActionMenuURLs.begin(); it != m_viewDocumentActionMenuURLs.end(); ++it )
1566
if (( *it ).endsWith( ".pdf" ) || ( *it ).endsWith( ".ps" ) || ( *it ).endsWith( ".djv" ) )
1568
new KRun( *it, this );
1573
void DocumentWidget::slotViewFirstDocumentsOnlineRef()
1575
for ( QStringList::Iterator it = m_viewDocumentActionMenuURLs.begin(); it != m_viewDocumentActionMenuURLs.end(); ++it )
1576
if (( *it ).contains( "dx.doi.org" ) )
1578
new KRun( *it, this );
1444
1583
void DocumentWidget::slotAssignKeywords( int id )
1585
QValueList<BibTeX::Entry*> entryList;
1446
1587
QListViewItem * item = m_listViewElements->selectedItem();
1447
1588
if ( item == NULL )
1448
1589
item = m_listViewElements->currentItem();
1590
for ( QListViewItemIterator it( m_listViewElements, QListViewItemIterator::Selected ); it.current(); ++it )
1592
BibTeX::Element * currentElement = NULL;
1593
DocumentListViewItem * dlvi = dynamic_cast<DocumentListViewItem*>( it.current() );
1594
if ( dlvi && (( currentElement = dlvi->element() ) != NULL ) )
1596
BibTeX::Entry *entry = dynamic_cast<BibTeX::Entry*>( currentElement );
1597
if ( entry != NULL )
1450
BibTeX::Element * currentElement = NULL;
1451
DocumentListViewItem * dlvi = dynamic_cast<DocumentListViewItem*>( item );
1452
if ( dlvi && (( currentElement = dlvi->element() ) != NULL ) )
1602
for ( QValueList<BibTeX::Entry*>::Iterator it = entryList.begin(); it != entryList.end(); ++it )
1454
BibTeX::Entry *entry = dynamic_cast<BibTeX::Entry*>( currentElement );
1604
BibTeX::Entry *entry = *it;
1455
1605
BibTeX::EntryField *field = NULL;
1456
1606
BibTeX::KeywordContainer *keywordContainer = NULL;
1457
1607
if (( field = entry->getField( BibTeX::EntryField::ftKeywords ) ) == NULL )
1481
1631
QString newKeyword = m_lineEditNewKeyword->text();
1483
QListViewItem * item = m_listViewElements->selectedItem();
1485
item = m_listViewElements->currentItem();
1486
DocumentListViewItem * dlvi = dynamic_cast<DocumentListViewItem*>( item );
1487
BibTeX::Element * currentElement = NULL;
1488
BibTeX::Entry * entry = NULL;
1489
if ( dlvi != NULL && ( currentElement = dlvi->element() ) != NULL && ( entry = dynamic_cast<BibTeX::Entry*>( currentElement ) ) != NULL )
1633
QValueList<BibTeX::Entry*> entryList;
1634
for ( QListViewItemIterator it( m_listViewElements, QListViewItemIterator::Selected ); it.current(); ++it )
1636
BibTeX::Element * currentElement = NULL;
1637
DocumentListViewItem * dlvi = dynamic_cast<DocumentListViewItem*>( it.current() );
1638
if ( dlvi && (( currentElement = dlvi->element() ) != NULL ) )
1640
BibTeX::Entry *entry = dynamic_cast<BibTeX::Entry*>( currentElement );
1641
if ( entry != NULL )
1646
for ( QValueList<BibTeX::Entry*>::Iterator it = entryList.begin(); it != entryList.end(); ++it )
1648
BibTeX::Entry *entry = *it;
1492
1649
BibTeX::EntryField *field = entry->getField( BibTeX::EntryField::ftKeywords );
1493
1650
if ( field == NULL )
1516
1676
slotModified();
1680
void DocumentWidget::slotNormalizeIds()
1682
Settings * settings = Settings::self();
1683
QMap<BibTeX::Entry*, QString> entryToNewId;
1684
QMap<BibTeX::Entry*, DocumentListViewItem*> entryToItem;
1685
QStringList msgList;
1687
if ( settings->idSuggestions_default < 0 )
1689
KMessageBox::sorry( this, i18n( "You must set a default id suggestion in the settings dialog." ) );
1693
for ( QListViewItemIterator it( m_listViewElements, QListViewItemIterator::Selected ); it.current(); ++it )
1695
BibTeX::Element * currentElement = NULL;
1696
DocumentListViewItem * dlvi = dynamic_cast<DocumentListViewItem*>( it.current() );
1697
if ( dlvi && (( currentElement = dlvi->element() ) != NULL ) )
1699
BibTeX::Entry *entry = dynamic_cast<BibTeX::Entry*>( currentElement );
1700
if ( entry != NULL )
1702
QString newEntryId = IdSuggestions::createDefaultSuggestion( m_bibtexfile, entry );
1703
entryToNewId[entry] = newEntryId;
1704
entryToItem[entry] = dlvi;
1705
msgList << "Replacing id of entry \"" + entry->id() + "\" with new id \"" + newEntryId + "\"";
1710
if ( entryToNewId.isEmpty() )
1711
KMessageBox::information( this, i18n( "No entries were selected." ) );
1712
else if ( KMessageBox::questionYesNoList( this, i18n( "The following changes will be applied to the currently selected elements.\nConflicts with duplicate entry ids will be resolved when applying the new ids." ), msgList, i18n( "Normalize Entry Ids" ), KGuiItem( i18n( "Replace Entry Ids" ), "run" ), KGuiItem( i18n( "Cancel" ), "cancel" ) ) == KMessageBox::Yes )
1714
QApplication::setOverrideCursor( Qt::waitCursor );
1715
QMap<BibTeX::Entry*, DocumentListViewItem*>::Iterator itItem = entryToItem.begin();
1716
for ( QMap<BibTeX::Entry*, QString>::Iterator it = entryToNewId.begin(); it != entryToNewId.end(); ++it, ++itItem )
1718
BibTeX::Entry *entry = it.key();
1719
QString newEntryId = it.data();
1720
newEntryId = IdSuggestions::resolveConflict( m_bibtexfile, newEntryId, entry );
1721
qDebug( "Replacing id of entry \"%s\" with new id \"%s\"", entry->id().latin1(), newEntryId.latin1() );
1722
entry->setId( newEntryId );
1723
itItem.data()->updateItem();
1726
m_sideBar->refreshLists( m_bibtexfile );
1727
QApplication::restoreOverrideCursor();
1731
KDirWatch &DocumentWidget::dirWatch()
1521
1738
#include "documentwidget.moc"