#ifndef HTML_MISCIMPL_H
#define HTML_MISCIMPL_H
#include "html_elementimpl.h"
#include "misc/shared.h"
#include <qdict.h>
#include <qptrvector.h>
namespace DOM {
class Node;
class DOMString;
class HTMLCollection;
class HTMLBaseFontElementImpl : public HTMLElementImpl
{
public:
HTMLBaseFontElementImpl(DocumentPtr *doc);
~HTMLBaseFontElementImpl();
virtual Id id() const;
};
class HTMLCollectionImpl : public khtml::Shared<HTMLCollectionImpl>
{
friend class DOM::HTMLCollection;
public:
enum Type {
DOC_IMAGES = 0, DOC_APPLETS, DOC_EMBEDS, DOC_OBJECTS, DOC_FORMS, DOC_LINKS, DOC_ANCHORS, TABLE_ROWS, TABLE_TBODIES, TSECTION_ROWS, TR_CELLS, SELECT_OPTIONS,
MAP_AREAS,
DOC_ALL, NODE_CHILDREN, DOC_NAMEABLE_ITEMS, LAST_TYPE
};
HTMLCollectionImpl(NodeImpl *_base, int _tagId);
virtual ~HTMLCollectionImpl();
unsigned long length() const;
virtual NodeImpl *item ( unsigned long index ) const;
virtual NodeImpl *firstItem() const;
virtual NodeImpl *nextItem() const;
virtual NodeImpl *namedItem ( const DOMString &name, bool caseSensitive = true ) const;
virtual NodeImpl *nextNamedItem( const DOMString &name ) const;
QValueList<Node> namedItems( const DOMString &name ) const;
struct CollectionInfo {
CollectionInfo();
void reset();
unsigned int version;
NodeImpl *current;
unsigned int position;
unsigned int length;
bool haslength;
int elementsArrayPosition;
QDict<QPtrVector<NodeImpl> > idCache;
QDict<QPtrVector<NodeImpl> > nameCache;
bool hasNameCache;
};
protected:
virtual void updateNameCache() const;
virtual NodeImpl *traverseNextItem(NodeImpl *start) const;
bool checkForNameMatch(NodeImpl *node, bool checkName, const DOMString &name, bool caseSensitive) const;
virtual unsigned long calcLength() const;
virtual void resetCollectionInfo() const;
NodeImpl *base;
int type;
mutable CollectionInfo *info;
mutable bool idsDone;
mutable bool m_ownsInfo;
};
class HTMLFormCollectionImpl : public HTMLCollectionImpl
{
public:
HTMLFormCollectionImpl(NodeImpl* _base);
~HTMLFormCollectionImpl();
virtual NodeImpl *item ( unsigned long index ) const;
virtual NodeImpl *firstItem() const;
virtual NodeImpl *nextItem() const;
virtual NodeImpl *namedItem ( const DOMString &name, bool caseSensitive = true ) const;
virtual NodeImpl *nextNamedItem( const DOMString &name ) const;
protected:
virtual void updateNameCache() const;
virtual unsigned long calcLength() const;
virtual NodeImpl *getNamedItem(NodeImpl* current, int attr_id, const DOMString& name, bool caseSensitive) const;
virtual NodeImpl *nextNamedItemInternal( const DOMString &name ) const;
private:
NodeImpl* getNamedFormItem(int attr_id, const DOMString& name, int duplicateNumber, bool caseSensitive) const;
mutable int currentPos;
};
};
#endif