Bumping gaia.json for 1 gaia revision(s) a=gaia-bump
[gecko.git] / xpfe / appshell / nsAppShellWindowEnumerator.h
blob09b7a9fd378f3f75bddbae684d3bc9bf99cada10
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 nsAppShellWindowEnumerator_h
7 #define nsAppShellWindowEnumerator_h
9 #include "nsCOMPtr.h"
10 #include "nsString.h"
12 #include "nsISimpleEnumerator.h"
13 #include "nsIXULWindow.h"
15 class nsWindowMediator;
18 // nsWindowInfo
21 struct nsWindowInfo
23 nsWindowInfo(nsIXULWindow* inWindow, int32_t inTimeStamp);
24 ~nsWindowInfo();
26 nsCOMPtr<nsIXULWindow> mWindow;
27 int32_t mTimeStamp;
28 uint32_t mZLevel;
30 // each struct is in two, independent, circular, doubly-linked lists
31 nsWindowInfo *mYounger, // next younger in sequence
32 *mOlder;
33 nsWindowInfo *mLower, // next lower in z-order
34 *mHigher;
36 bool TypeEquals(const nsAString &aType);
37 void InsertAfter(nsWindowInfo *inOlder, nsWindowInfo *inHigher);
38 void Unlink(bool inAge, bool inZ);
39 void ReferenceSelf(bool inAge, bool inZ);
43 // virtual enumerators
46 class nsAppShellWindowEnumerator : public nsISimpleEnumerator {
48 friend class nsWindowMediator;
50 public:
51 nsAppShellWindowEnumerator(const char16_t* aTypeString,
52 nsWindowMediator& inMediator);
53 NS_IMETHOD GetNext(nsISupports **retval) = 0;
54 NS_IMETHOD HasMoreElements(bool *retval);
56 NS_DECL_ISUPPORTS
58 protected:
60 virtual ~nsAppShellWindowEnumerator();
62 void AdjustInitialPosition();
63 virtual nsWindowInfo *FindNext() = 0;
65 void WindowRemoved(nsWindowInfo *inInfo);
67 nsWindowMediator *mWindowMediator;
68 nsString mType;
69 nsWindowInfo *mCurrentPosition;
72 class nsASDOMWindowEnumerator : public nsAppShellWindowEnumerator {
74 public:
75 nsASDOMWindowEnumerator(const char16_t* aTypeString,
76 nsWindowMediator& inMediator);
77 virtual ~nsASDOMWindowEnumerator();
78 NS_IMETHOD GetNext(nsISupports **retval);
81 class nsASXULWindowEnumerator : public nsAppShellWindowEnumerator {
83 public:
84 nsASXULWindowEnumerator(const char16_t* aTypeString,
85 nsWindowMediator& inMediator);
86 virtual ~nsASXULWindowEnumerator();
87 NS_IMETHOD GetNext(nsISupports **retval);
91 // concrete enumerators
94 class nsASDOMWindowEarlyToLateEnumerator : public nsASDOMWindowEnumerator {
96 public:
97 nsASDOMWindowEarlyToLateEnumerator(const char16_t* aTypeString,
98 nsWindowMediator& inMediator);
100 virtual ~nsASDOMWindowEarlyToLateEnumerator();
102 protected:
103 virtual nsWindowInfo *FindNext();
106 class nsASXULWindowEarlyToLateEnumerator : public nsASXULWindowEnumerator {
108 public:
109 nsASXULWindowEarlyToLateEnumerator(const char16_t* aTypeString,
110 nsWindowMediator& inMediator);
112 virtual ~nsASXULWindowEarlyToLateEnumerator();
114 protected:
115 virtual nsWindowInfo *FindNext();
118 class nsASDOMWindowFrontToBackEnumerator : public nsASDOMWindowEnumerator {
120 public:
121 nsASDOMWindowFrontToBackEnumerator(const char16_t* aTypeString,
122 nsWindowMediator& inMediator);
124 virtual ~nsASDOMWindowFrontToBackEnumerator();
126 protected:
127 virtual nsWindowInfo *FindNext();
130 class nsASXULWindowFrontToBackEnumerator : public nsASXULWindowEnumerator {
132 public:
133 nsASXULWindowFrontToBackEnumerator(const char16_t* aTypeString,
134 nsWindowMediator& inMediator);
136 virtual ~nsASXULWindowFrontToBackEnumerator();
138 protected:
139 virtual nsWindowInfo *FindNext();
142 class nsASDOMWindowBackToFrontEnumerator : public nsASDOMWindowEnumerator {
144 public:
145 nsASDOMWindowBackToFrontEnumerator(const char16_t* aTypeString,
146 nsWindowMediator& inMediator);
148 virtual ~nsASDOMWindowBackToFrontEnumerator();
150 protected:
151 virtual nsWindowInfo *FindNext();
154 class nsASXULWindowBackToFrontEnumerator : public nsASXULWindowEnumerator {
156 public:
157 nsASXULWindowBackToFrontEnumerator(const char16_t* aTypeString,
158 nsWindowMediator& inMediator);
160 virtual ~nsASXULWindowBackToFrontEnumerator();
162 protected:
163 virtual nsWindowInfo *FindNext();
166 #endif