⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 loader.h

📁 将konqueror浏览器移植到ARM9 2410中
💻 H
字号:
/*    This file is part of the KDE libraries    Copyright (C) 1998 Lars Knoll (knoll@mpi-hd.mpg.de)    Copyright (C) 2001 Dirk Mueller <mueller@kde.org>    This library is free software; you can redistribute it and/or    modify it under the terms of the GNU Library General Public    License as published by the Free Software Foundation; either    version 2 of the License, or (at your option) any later version.    This library 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    Library General Public License for more details.    You should have received a copy of the GNU Library General Public License    along with this library; see the file COPYING.LIB.  If not, write to    the Free Software Foundation, Inc., 59 Temple Place - Suite 330,    Boston, MA 02111-1307, USA.    This class provides all functionality needed for loading images, style sheets and html    pages from the web. It has a memory cache for these objects.*/#ifndef _khtml_loader_h#define _khtml_loader_h#ifdef HAVE_CONFIG_H#include <config.h>#endif#include "loader_client.h"#ifdef HAVE_LIBJPEG#include "loader_jpeg.h"#endif#include <stdlib.h>#include <qlist.h>#include <qobject.h>#include <qptrdict.h>#include <qdict.h>#include <qpixmap.h>#include <qbuffer.h>#include <qstringlist.h>#include <qtextcodec.h>#include <kurl.h>#include <dom/dom_string.h>class QMovie;class KHTMLPart;namespace KIO {  class Job;  class TransferJob;}namespace DOM{    class CSSStyleSheetImpl;    class DocumentImpl;};namespace khtml{    class CachedObject;    class Request;    /**     * @internal     *     * A cached object. Classes who want to use this object should derive     * from CachedObjectClient, to get the function calls in case the requested data has arrived.     *     * This class also does the actual communication with kio and loads the file.     */    class CachedObject    {    public:	enum Type {	    Image,	    CSSStyleSheet,	    Script	};	enum Status {	    NotCached,    // this URL is not cached	    Unknown,      // let imagecache decide what to do with it	    New,          // inserting new image            Pending,      // only partially loaded	    Persistent,   // never delete this pixmap	    Cached,       // regular case	    Uncacheable   // to big to be cached,	};  	          // will be destroyed as soon as possible	CachedObject(const DOM::DOMString &url, Type type, bool _reload, int _expireDate)	{	    m_url = url;	    m_type = type;	    m_status = Pending;	    m_size = 0;	    m_free = false;	    m_reload = _reload;	    m_request = 0;	    m_expireDate = _expireDate;            m_deleted = false;	}	virtual ~CachedObject() {            if(m_deleted) abort();            m_deleted = true;        }	virtual void data( QBuffer &buffer, bool eof) = 0;	virtual void error( int err, const char *text ) = 0;	const DOM::DOMString &url() const { return m_url; }	Type type() const { return m_type; }	virtual void ref(CachedObjectClient *consumer) = 0;	virtual void deref(CachedObjectClient *consumer) = 0;	int count() const { return m_clients.count(); }	void setStatus(Status s) { m_status = s; }	Status status() const { return m_status; }	int size() const { return m_size; }	/*	 * computes the status of an object after loading.	 * the result depends on the objects size and the size of the cache	 * also updates the expire date on the cache entry file	 */	void finish();        /*         * Called by the cache if the object has been removed from the cache dict         * while still being referenced. This means the object should kill itself         * if its reference counter drops down to zero.         */        void setFree( bool b ) { m_free = b; }        bool reload() const { return m_reload; }        void setRequest(Request *_request);        bool canDelete() const { return (m_clients.count() == 0 && !m_request); }	void setExpireDate(int _expireDate);        /*         * List of acceptable mimetypes seperated by ",". A mimetype may contain a wildcard.         */        // e.g. "text/*"        QString accept() const { return m_accept; }        void setAccept(const QString &_accept) { m_accept = _accept; }    protected:        QList<CachedObjectClient> m_clients;        	DOM::DOMString m_url;        QString m_accept;        Request *m_request;	Type m_type;	Status m_status;	int m_size;	int m_expireDate;        bool m_free;        bool m_reload;        bool m_deleted;    };    /**     * a cached style sheet     */    class CachedCSSStyleSheet : public CachedObject    {    public:	CachedCSSStyleSheet(const DOM::DOMString &url, const DOM::DOMString &baseURL, bool reload, int _expireDate, const QString& charset);	virtual ~CachedCSSStyleSheet();	const DOM::DOMString &sheet() const { return m_sheet; }	virtual void ref(CachedObjectClient *consumer);	virtual void deref(CachedObjectClient *consumer);	virtual void data( QBuffer &buffer, bool eof );	virtual void error( int err, const char *text );	void checkNotify();    protected:	DOM::DOMString m_sheet;	bool loading;        QTextCodec* m_codec;    };    /**     * a cached script     */    class CachedScript : public CachedObject    {    public:	CachedScript(const DOM::DOMString &url, const DOM::DOMString &baseURL, bool reload, int _expireDate, const QString& charset);	virtual ~CachedScript();	const DOM::DOMString &script() const { return m_script; }	virtual void ref(CachedObjectClient *consumer);	virtual void deref(CachedObjectClient *consumer);	virtual void data( QBuffer &buffer, bool eof );	virtual void error( int err, const char *text );	void checkNotify();    protected:	DOM::DOMString m_script;	bool loading;        QTextCodec* m_codec;    };    class ImageSource;    /**     * a cached image     */    class CachedImage : public QObject, public CachedObject    {	Q_OBJECT    public:	CachedImage(const DOM::DOMString &url, const DOM::DOMString &baseURL, bool reload, int _expireDate);	virtual ~CachedImage();	const QPixmap &pixmap() const;	const QPixmap &tiled_pixmap(const QColor& bg);        QSize pixmap_size() const;    // returns the size of the complete (i.e. when finished) loading        QRect valid_rect() const;     // returns the rectangle of pixmap that has been loaded already        void ref(CachedObjectClient *consumer);	virtual void deref(CachedObjectClient *consumer);	virtual void data( QBuffer &buffer, bool eof );	virtual void error( int err, const char *text );        const DOM::DOMString& baseURL() const { return m_baseURL; }        bool isTransparent() const { return isFullyTransparent; }        bool isErrorImage() const { return errorOccured; }        void setShowAnimations( bool );    protected:	void clear();    private slots:	/**	 * gets called, whenever a QMovie changes frame	 */	void movieUpdated( const QRect &rect );        void movieStatus(int);        void movieResize(const QSize&);    private:        void do_notify(const QPixmap& p, const QRect& r);        DOM::DOMString m_baseURL;        QRgb bgColor;	QMovie* m;        QPixmap* p;	QPixmap* bg;        mutable QPixmap* pixPart;        ImageSource* imgSource;        const char* formatType;  // Is the name of the movie format type	int width;	int height;        bool monochrome;	// Is set if movie format type ( incremental/animation) was checked	bool typeChecked;        bool isFullyTransparent;        bool errorOccured;        friend class Cache;    };    /**     * @internal     *     * Manages the loading of scripts/images/stylesheets for a particular document     */    class DocLoader    {    public: 	DocLoader(KHTMLPart*); 	~DocLoader();	CachedImage *requestImage( const DOM::DOMString &url, const DOM::DOMString &baseUrl);	CachedCSSStyleSheet *requestStyleSheet( const DOM::DOMString &url, const DOM::DOMString &baseUrl, const QString& charset);        CachedScript *requestScript( const DOM::DOMString &url, const DOM::DOMString &baseUrl, const QString& charset);	bool autoloadImages() const { return m_bautoloadImages; }        bool reloading() const { return m_reloading; }        int expireDate() const { return m_expireDate; }        void setExpireDate( int );        void setAutoloadImages( bool );        void setReloading( bool );        void setShowAnimations( bool );        void removeCachedObject( CachedObject*) const;    private:        friend class Cache;        friend class DOM::DocumentImpl;                QStringList m_reloadedURLs;        mutable QList<CachedObject> m_docObjects;	int m_expireDate;	bool m_reloading;        bool m_bautoloadImages;        bool m_showAnimations;        KHTMLPart* m_part;    };    /**     * @internal     */    class Request    {    public:	Request(CachedObject *_object, const DOM::DOMString &baseURL, bool _incremental);	~Request();	bool incremental;	QBuffer m_buffer;	CachedObject *object;	DOM::DOMString m_baseURL;    };    /**     * @internal     */    class Loader : public QObject    {	Q_OBJECT                public:     	Loader();	~Loader();        	void load(CachedObject *object, const DOM::DOMString &baseURL, bool incremental = true);        int numRequests( const DOM::DOMString &baseURL ) const;        int numRequests( const DOM::DOMString &baseURL, CachedObject::Type type ) const;        void cancelRequests( const DOM::DOMString &baseURL );        // may return 0L        KIO::Job *jobForRequest( const DOM::DOMString &url ) const;    signals:	void requestDone( const DOM::DOMString &baseURL, khtml::CachedObject *obj );	void requestFailed( const DOM::DOMString &baseURL, khtml::CachedObject *obj );    protected slots:	void slotFinished( KIO::Job * );	void slotData( KIO::Job *, const QByteArray & );    private:	void servePendingRequests();	QList<Request> m_requestsPending;	QPtrDict<Request> m_requestsLoading;#ifdef HAVE_LIBJPEG        KJPEGFormatType m_jpegloader;#endif    };        /**     * @internal     *     * Provides a cache/loader for objects needed for displaying the html page.     * At the moment these are stylesheets, scripts and images     */    class Cache    {	friend class DocLoader;    public:	/**	 * init the cache in case it's not already. This needs to get called once	 * before using it.	 */	static void init();	/**	 * Ask the cache for some url. Will return a cachedObject, and	 * load the requested data in case it's not cahced	 */	static CachedImage *requestImage( const DocLoader* l, const DOM::DOMString &url, const DOM::DOMString &baseUrl, bool reload=false, int _expireDate=0);	/**	 * Ask the cache for some url. Will return a cachedObject, and	 * load the requested data in case it's not cahced	 */	static CachedCSSStyleSheet *requestStyleSheet( const DocLoader* l, const DOM::DOMString &url, const DOM::DOMString &baseUrl, bool reload=false, int _expireDate=0, const QString& charset = QString::null);	/**	 * Ask the cache for some url. Will return a cachedObject, and	 * load the requested data in case it's not cahced	 */	static CachedScript *requestScript( const DocLoader* l, const DOM::DOMString &url, const DOM::DOMString &baseUrl, bool reload=false, int _expireDate=0, const QString& charset=QString::null);	/**	 * sets the size of the cache. This will only hod approximately, since the size some	 * cached objects (like stylesheets) take up in memory is not exaclty known.	 */	static void setSize( int bytes );	/** returns the size of the cache */	static int size() { return maxSize; };	/** prints some statistics to stdout */	static void statistics();	/** clean up cache */	static void flush(bool force=false);	/**	 * clears the cache	 * Warning: call this only at the end of your program, to clean	 * up memory (useful for finding memory holes)	 */	static void clear();	static Loader *loader() { return m_loader; }	static KURL completeURL(const DOM::DOMString &url, const DOM::DOMString &baseUrl);    	static QPixmap *nullPixmap;        static QPixmap *brokenPixmap;        static void removeCacheEntry( CachedObject *object );        protected:	/*	 * @internal	 */	class LRUList : public QStringList	{	public:	    /**	     * implements the LRU list	     * The least recently used item is at the beginning of the list.	     */	    void touch( const QString &url )	    {		remove( url );		append( url );	    }	};	static QDict<CachedObject> *cache;	static LRUList *lru;        static QList<DocLoader>* docloader;	static int maxSize;	static int flushCount;	static Loader *m_loader;        static unsigned long s_ulRefCnt;    };};#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -