/*************************************************************************** * Copyright (C) 2004-2009 by Thomas Fischer * * fischer@unix-ag.uni-kl.de * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #include "webquerymathscinet.h" #include #include #include #include #include #include #include #include #include #include #include #include "settings.h" namespace KBibTeX { WebQueryMathSciNetWidget::WebQueryMathSciNetWidget( TQWidget *parent, const char *name ) : WebQueryWidget( parent, name ) { init(); Settings *settings = Settings::self(); TQString value = settings->getWebQueryDefault( "MathSciNet" ); value = value == TQString::null ? "" : value; lineEditQuery->setText( value ); slotTextChanged( value, true ); } void WebQueryMathSciNetWidget::init() { TQVBoxLayout *vLayout = new TQVBoxLayout( this, 0, KDialog::spacingHint() ); TQHBoxLayout *hLayout = new TQHBoxLayout( ); vLayout->addLayout( hLayout ); KPushButton *clearSearchText = new KPushButton( this ); clearSearchText->setIconSet( TQIconSet( SmallIcon( "locationbar_erase" ) ) ); hLayout->addWidget( clearSearchText ); TQLabel *label = new TQLabel( i18n( "Search &term:" ), this ); hLayout->addWidget( label ); lineEditQuery = new KLineEdit( this ); hLayout->addWidget( lineEditQuery ); label->setBuddy( lineEditQuery ); hLayout->addSpacing( KDialog::spacingHint() * 2 ); connect( clearSearchText, SIGNAL( clicked() ), lineEditQuery, SLOT( clear() ) ); connect( lineEditQuery, SIGNAL( textChanged( const TQString& ) ), this, SLOT( slotTextChanged( const TQString& ) ) ); hLayout->setStretchFactor( lineEditQuery, 4 ); TDECompletion *completionQuery = lineEditQuery->completionObject(); /* label = new TQLabel( i18n( "&Number of results:" ), this ); hLayout->addWidget( label ); spinBoxMaxHits = new TQSpinBox( 1, 250, 1, this ); spinBoxMaxHits->setValue( 10 ); hLayout->addWidget( spinBoxMaxHits ); label->setBuddy( spinBoxMaxHits ); */ label = new TQLabel( i18n( "Use the same synatx as for BIBGET. For spaces within a search element, use \"+\".
Example: a=gilkey t=invariance book 1984
" ), this ); vLayout->addWidget( label ); vLayout->addStretch( 0 ); connect( lineEditQuery, SIGNAL( returnPressed() ), this, SIGNAL( startSearch() ) ); connect( lineEditQuery, SIGNAL( returnPressed( const TQString& ) ), completionQuery, SLOT( addItem( const TQString& ) ) ); } WebQueryMathSciNet::WebQueryMathSciNet( TQWidget* parent ): WebQuery( parent ) { m_widget = new WebQueryMathSciNetWidget( parent ); } WebQueryMathSciNet::~WebQueryMathSciNet() { delete m_widget; } TQString WebQueryMathSciNet::title() { return i18n( "MathSciNet" ); } TQString WebQueryMathSciNet::disclaimer() { return i18n( "American Mathematical Society" ); } TQString WebQueryMathSciNet::disclaimerURL() { return "http://www.ams.org/ams/copyright.html"; } WebQueryWidget *WebQueryMathSciNet::widget() { return m_widget; } void WebQueryMathSciNet::query() { WebQuery::query(); Settings *settings = Settings::self(); settings->setWebQueryDefault( "MathSciNet", m_widget->lineEditQuery->text() ); setNumStages( 1 ); TQStringList searchTerms = TQStringList::split( TQRegExp( "\\s+" ), m_widget->lineEditQuery->text().stripWhiteSpace() ); if ( searchTerms.isEmpty() ) { setEndSearch( WebQuery::statusInvalidQuery ); return; } TQStringList queryTerms; int count = 1; for ( TQStringList::ConstIterator it = searchTerms.constBegin(); it != searchTerms.constEnd(); ++it ) { const TQString term=*it; if ( term.startsWith( "a=" ) ) queryTerms << TQString( "pg%1=AUCN" ).arg( count ) << TQString( "s%1=%2" ).arg( count ).arg( term.mid( 2 ) ); else if ( term.startsWith( "t=" ) ) queryTerms << TQString( "pg%1=TI" ).arg( count ) << TQString( "s%1=%2" ).arg( count ).arg( term.mid( 2 ) ); else if ( term.startsWith( "k=" ) ) queryTerms << TQString( "pg%1=ALLF" ).arg( count ) << TQString( "s%1=%2" ).arg( count ).arg( term.mid( 2 ) ); else if ( term.startsWith( "r=" ) ) queryTerms << TQString( "pg%1=MR" ).arg( count ) << TQString( "s%1=%2" ).arg( count ).arg( term.mid( 2 ) ); else if ( term.startsWith( "j=" ) ) queryTerms << TQString( "pg%1=JOUR" ).arg( count ) << TQString( "s%1=%2" ).arg( count ).arg( term.mid( 2 ) ); else queryTerms << TQString( "pg%1=ALLF" ).arg( count ) << TQString( "s%1=%2" ).arg( count ).arg( term ); ++count; } KURL url( TQString( "http://www.ams.org/msnmain?fn=130&fmt=bibtex&l=100&extend=1&" ).append( queryTerms.join( "&" ) ) ); kdDebug()<<"url="<begin(); it != bibFile->end(); ++it ) { BibTeX::Entry *entry = dynamic_cast( *it ); if ( entry != NULL ) emit foundEntry( entry, false ); } setEndSearch( WebQuery::statusSuccess ); } else if ( !m_aborted ) { TQString message = TDEIO::NetAccess::lastErrorString(); if ( message.isEmpty() ) message.prepend( '\n' ); message.prepend( TQString( i18n( "Querying database '%1' failed." ) ).arg( title() ) ); KMessageBox::error( m_parent, message ); setEndSearch( WebQuery::statusError ); } else setEndSearch( WebQuery::statusAborted ); if ( bibFile != NULL ) delete bibFile; } } #include "webquerymathscinet.moc"