diff options
author | Slávek Banko <[email protected]> | 2013-06-24 02:08:15 +0200 |
---|---|---|
committer | Slávek Banko <[email protected]> | 2013-07-04 02:44:37 +0200 |
commit | 998f21e02a725cd553d7c278819f67cd81295af4 (patch) | |
tree | 4bd158018e9302c31367b00c01cd2b41eb228414 /src/webquery.h | |
download | kbibtex-998f21e02a725cd553d7c278819f67cd81295af4.tar.gz kbibtex-998f21e02a725cd553d7c278819f67cd81295af4.zip |
Initial import
Diffstat (limited to 'src/webquery.h')
-rw-r--r-- | src/webquery.h | 179 |
1 files changed, 179 insertions, 0 deletions
diff --git a/src/webquery.h b/src/webquery.h new file mode 100644 index 0000000..f4b46b4 --- /dev/null +++ b/src/webquery.h @@ -0,0 +1,179 @@ +/*************************************************************************** +* Copyright (C) 2004-2006 by Thomas Fischer * +* [email protected] * +* * +* 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 <[email protected]> + */ + 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 <[email protected]> + */ + 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 |