You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
kbibtex/src/webquery.h

180 lines
5.5 KiB

/***************************************************************************
* Copyright (C) 2004-2006 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. *
***************************************************************************/
#ifndef KBIBTEXWEBQUERY_H
#define KBIBTEXWEBQUERY_H
#include <qobject.h>
#include <qstring.h>
#include <kdialogbase.h>
#include <klistview.h>
#include <klineedit.h>
#include <kio/jobclasses.h>
#include <kprogress.h>
#include "entry.h"
class QWidget;
class QFrame;
class QCheckBox;
class QSpinBox;
class KComboBox;
class KListView;
class KPushButton;
namespace KBibTeX
{
/**
@author Thomas Fischer <fischer@unix-ag.uni-kl.de>
*/
class WebQueryWidget : public QWidget
{
Q_OBJECT
public:
WebQueryWidget( QWidget *parent, const char *name = 0 );
virtual bool searchPossible();
KLineEdit *lineEditQuery;
QSpinBox *spinBoxMaxHits;
protected:
virtual void init();
signals:
void enableSearch( bool );
void startSearch();
protected slots:
void slotTextChanged( const QString& );
void slotTextChanged( const QString&, bool delayed );
private slots:
void slotEnableSearchTrue();
};
/**
@author Thomas Fischer <fischer@unix-ag.uni-kl.de>
*/
class WebQuery : public QObject
{
Q_OBJECT
public:
enum Status { statusSuccess, statusError, statusAborted, statusInvalidQuery, statusInsufficientPermissions };
WebQuery( QWidget *parent );
virtual ~WebQuery();
virtual void query();
virtual QString title() { return "no_title"; };
virtual QString disclaimer() = 0;
virtual QString disclaimerURL() = 0;
virtual WebQueryWidget *widget() = 0;
signals:
void foundEntry( BibTeX::Entry*, bool );
void endSearch( WebQuery::Status );
protected:
bool m_aborted;
QWidget *m_parent;
KProgressDialog *m_progressDialog;
virtual void cancelQuery();
void setEndSearch( WebQuery::Status );
void setNumStages( int numStages );
void enterNextStage();
QString download( const KURL& url );
QString downloadHTML( const KURL& url );
BibTeX::File *downloadBibTeXFile( const KURL& url, QTextStream::Encoding = QTextStream::UnicodeUTF8 );
private:
int m_currentStage;
int m_numStages;
KIO::TransferJob *m_currentJob;
int m_currentJobTotalSize;
QString m_incomingData;
private slots:
void slotCancelQuery();
void slotSetJobTotalSize( KIO::Job *job, KIO::filesize_t size );
void slotSetJobProcessedSize( KIO::Job *job, KIO::filesize_t size );
void slotJobData( KIO::Job *job, const QByteArray &data );
void slotJobFinished( KIO::Job *job );
};
class WebQueryWizard: public QWidget
{
Q_OBJECT
public:
~WebQueryWizard();
static int execute( QWidget *parent, QValueList<BibTeX::Entry*> &results );
signals:
void changeButtonOK( bool state );
protected:
KListView *m_listViewResults;
KComboBox *m_comboBoxEngines;
QWidgetStack *m_widgetStackQueries;
KURLLabel *m_disclaimerLabel;
QCheckBox *m_checkBoxImportAll;
QValueList<WebQuery*> m_webQueries;
KDialogBase *m_dlg;
WebQueryWizard( KDialogBase *dlg, const char* name = 0 );
void showEvent( QShowEvent * );
private slots:
void previewEntry( QListViewItem *item );
void importEnableChanging( );
void otherEngineSelected( int index );
void startSearch();
void endSearch( WebQuery::Status );
void addHit( BibTeX::Entry*, bool keepId = false );
void enableSearch( bool );
void openURL( const QString& );
private:
KPushButton *m_pushButtonSearch;
void setupGUI( );
void setupQueries();
void restoreWindowSize( KConfig *config );
void saveWindowSize( KConfig *config ) const;
};
class ResultsListViewItem: public QListViewItem
{
public:
ResultsListViewItem( QListView * parent, BibTeX::Entry *entry );
~ResultsListViewItem();
BibTeX::Entry* entry();
private:
BibTeX::Entry *m_entry;
};
}
#endif