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.
180 lines
5.5 KiB
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 <tqobject.h>
|
|
#include <tqstring.h>
|
|
|
|
#include <kdialogbase.h>
|
|
#include <tdelistview.h>
|
|
#include <klineedit.h>
|
|
#include <tdeio/jobclasses.h>
|
|
#include <kprogress.h>
|
|
|
|
#include "entry.h"
|
|
|
|
class TQWidget;
|
|
class TQFrame;
|
|
class TQCheckBox;
|
|
class TQSpinBox;
|
|
class KComboBox;
|
|
class TDEListView;
|
|
class KPushButton;
|
|
|
|
namespace KBibTeX
|
|
{
|
|
/**
|
|
@author Thomas Fischer <fischer@unix-ag.uni-kl.de>
|
|
*/
|
|
class WebQueryWidget : public TQWidget
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
WebQueryWidget( TQWidget *parent, const char *name = 0 );
|
|
virtual bool searchPossible();
|
|
|
|
KLineEdit *lineEditQuery;
|
|
TQSpinBox *spinBoxMaxHits;
|
|
|
|
protected:
|
|
virtual void init();
|
|
|
|
signals:
|
|
void enableSearch( bool );
|
|
void startSearch();
|
|
|
|
protected slots:
|
|
void slotTextChanged( const TQString& );
|
|
void slotTextChanged( const TQString&, bool delayed );
|
|
|
|
private slots:
|
|
void slotEnableSearchTrue();
|
|
};
|
|
|
|
/**
|
|
@author Thomas Fischer <fischer@unix-ag.uni-kl.de>
|
|
*/
|
|
class WebQuery : public TQObject
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
enum Status { statusSuccess, statusError, statusAborted, statusInvalidQuery, statusInsufficientPermissions };
|
|
|
|
WebQuery( TQWidget *parent );
|
|
virtual ~WebQuery();
|
|
|
|
virtual void query();
|
|
|
|
virtual TQString title() { return "no_title"; };
|
|
virtual TQString disclaimer() = 0;
|
|
virtual TQString disclaimerURL() = 0;
|
|
|
|
virtual WebQueryWidget *widget() = 0;
|
|
|
|
signals:
|
|
void foundEntry( BibTeX::Entry*, bool );
|
|
void endSearch( WebQuery::Status );
|
|
|
|
protected:
|
|
bool m_aborted;
|
|
TQWidget *m_parent;
|
|
KProgressDialog *m_progressDialog;
|
|
|
|
virtual void cancelQuery();
|
|
|
|
void setEndSearch( WebQuery::Status );
|
|
void setNumStages( int numStages );
|
|
void enterNextStage();
|
|
TQString download( const KURL& url );
|
|
TQString downloadHTML( const KURL& url );
|
|
BibTeX::File *downloadBibTeXFile( const KURL& url, TQTextStream::Encoding = TQTextStream::UnicodeUTF8 );
|
|
|
|
private:
|
|
int m_currentStage;
|
|
int m_numStages;
|
|
TDEIO::TransferJob *m_currentJob;
|
|
int m_currentJobTotalSize;
|
|
TQString m_incomingData;
|
|
|
|
private slots:
|
|
void slotCancelQuery();
|
|
void slotSetJobTotalSize( TDEIO::Job *job, TDEIO::filesize_t size );
|
|
void slotSetJobProcessedSize( TDEIO::Job *job, TDEIO::filesize_t size );
|
|
void slotJobData( TDEIO::Job *job, const TQByteArray &data );
|
|
void slotJobFinished( TDEIO::Job *job );
|
|
};
|
|
|
|
class WebQueryWizard: public TQWidget
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
~WebQueryWizard();
|
|
|
|
static int execute( TQWidget *parent, TQValueList<BibTeX::Entry*> &results );
|
|
|
|
signals:
|
|
void changeButtonOK( bool state );
|
|
|
|
protected:
|
|
TDEListView *m_listViewResults;
|
|
KComboBox *m_comboBoxEngines;
|
|
TQWidgetStack *m_widgetStackQueries;
|
|
KURLLabel *m_disclaimerLabel;
|
|
TQCheckBox *m_checkBoxImportAll;
|
|
TQValueList<WebQuery*> m_webQueries;
|
|
KDialogBase *m_dlg;
|
|
|
|
WebQueryWizard( KDialogBase *dlg, const char* name = 0 );
|
|
void showEvent( TQShowEvent * );
|
|
|
|
private slots:
|
|
void previewEntry( TQListViewItem *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 TQString& );
|
|
|
|
private:
|
|
KPushButton *m_pushButtonSearch;
|
|
|
|
void setupGUI( );
|
|
void setupQueries();
|
|
void restoreWindowSize( TDEConfig *config );
|
|
void saveWindowSize( TDEConfig *config ) const;
|
|
};
|
|
|
|
class ResultsListViewItem: public TQListViewItem
|
|
{
|
|
public:
|
|
ResultsListViewItem( TQListView * parent, BibTeX::Entry *entry );
|
|
~ResultsListViewItem();
|
|
|
|
BibTeX::Entry* entry();
|
|
private:
|
|
BibTeX::Entry *m_entry;
|
|
};
|
|
}
|
|
|
|
#endif
|