Bumping gaia.json for 8 gaia revision(s) a=gaia-bump
[gecko.git] / editor / txtsvc / nsFilteredContentIterator.h
blob11fe5e9487c7544651a8c1479808480825198ac2
1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* This Source Code Form is subject to the terms of the Mozilla Public
3 * License, v. 2.0. If a copy of the MPL was not distributed with this
4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6 #ifndef nsFilteredContentIterator_h__
7 #define nsFilteredContentIterator_h__
9 #include "nsCOMPtr.h"
10 #include "nsCycleCollectionParticipant.h"
11 #include "nsIContentIterator.h"
12 #include "nsISupportsImpl.h"
13 #include "nscore.h"
15 class nsIAtom;
16 class nsIDOMNode;
17 class nsIDOMRange;
18 class nsINode;
19 class nsITextServicesFilter;
20 class nsRange;
22 class nsFilteredContentIterator MOZ_FINAL : public nsIContentIterator
24 public:
26 // nsISupports interface...
27 NS_DECL_CYCLE_COLLECTING_ISUPPORTS
28 NS_DECL_CYCLE_COLLECTION_CLASS(nsFilteredContentIterator)
30 explicit nsFilteredContentIterator(nsITextServicesFilter* aFilter);
32 /* nsIContentIterator */
33 virtual nsresult Init(nsINode* aRoot) MOZ_OVERRIDE;
34 virtual nsresult Init(nsIDOMRange* aRange) MOZ_OVERRIDE;
35 virtual void First() MOZ_OVERRIDE;
36 virtual void Last() MOZ_OVERRIDE;
37 virtual void Next() MOZ_OVERRIDE;
38 virtual void Prev() MOZ_OVERRIDE;
39 virtual nsINode *GetCurrentNode() MOZ_OVERRIDE;
40 virtual bool IsDone() MOZ_OVERRIDE;
41 virtual nsresult PositionAt(nsINode* aCurNode) MOZ_OVERRIDE;
43 /* Helpers */
44 bool DidSkip() { return mDidSkip; }
45 void ClearDidSkip() { mDidSkip = false; }
47 protected:
48 nsFilteredContentIterator() { }
50 virtual ~nsFilteredContentIterator();
52 // enum to give us the direction
53 typedef enum {eDirNotSet, eForward, eBackward} eDirectionType;
54 nsresult AdvanceNode(nsIDOMNode* aNode, nsIDOMNode*& aNewNode, eDirectionType aDir);
55 void CheckAdvNode(nsIDOMNode* aNode, bool& aDidSkip, eDirectionType aDir);
56 nsresult SwitchDirections(bool aChangeToForward);
58 nsCOMPtr<nsIContentIterator> mCurrentIterator;
59 nsCOMPtr<nsIContentIterator> mIterator;
60 nsCOMPtr<nsIContentIterator> mPreIterator;
62 nsCOMPtr<nsIAtom> mBlockQuoteAtom;
63 nsCOMPtr<nsIAtom> mScriptAtom;
64 nsCOMPtr<nsIAtom> mTextAreaAtom;
65 nsCOMPtr<nsIAtom> mSelectAreaAtom;
66 nsCOMPtr<nsIAtom> mMapAtom;
68 nsCOMPtr<nsITextServicesFilter> mFilter;
69 nsRefPtr<nsRange> mRange;
70 bool mDidSkip;
71 bool mIsOutOfRange;
72 eDirectionType mDirection;
75 #endif