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
12 #include "nsSimpleEnumerator.h"
13 #include "nsIAppWindow.h"
15 class nsWindowMediator
;
22 nsWindowInfo(nsIAppWindow
* inWindow
, int32_t inTimeStamp
);
25 nsCOMPtr
<nsIAppWindow
> mWindow
;
28 // each struct is in two, independent, circular, doubly-linked lists
29 nsWindowInfo
*mYounger
, // next younger in sequence
31 nsWindowInfo
*mLower
, // next lower in z-order
34 bool TypeEquals(const nsAString
& aType
);
35 void InsertAfter(nsWindowInfo
* inOlder
, nsWindowInfo
* inHigher
);
36 void Unlink(bool inAge
, bool inZ
);
37 void ReferenceSelf(bool inAge
, bool inZ
);
41 // virtual enumerators
44 class nsAppShellWindowEnumerator
: public nsSimpleEnumerator
{
45 friend class nsWindowMediator
;
48 nsAppShellWindowEnumerator(const char16_t
* aTypeString
,
49 nsWindowMediator
& inMediator
);
50 NS_IMETHOD
GetNext(nsISupports
** retval
) override
= 0;
51 NS_IMETHOD
HasMoreElements(bool* retval
) override
;
54 ~nsAppShellWindowEnumerator() override
;
56 void AdjustInitialPosition();
57 virtual nsWindowInfo
* FindNext() = 0;
59 void WindowRemoved(nsWindowInfo
* inInfo
);
61 nsWindowMediator
* mWindowMediator
;
63 nsWindowInfo
* mCurrentPosition
;
66 class nsASDOMWindowEnumerator
: public nsAppShellWindowEnumerator
{
68 nsASDOMWindowEnumerator(const char16_t
* aTypeString
,
69 nsWindowMediator
& inMediator
);
70 virtual ~nsASDOMWindowEnumerator();
71 NS_IMETHOD
GetNext(nsISupports
** retval
) override
;
74 class nsASAppWindowEnumerator
: public nsAppShellWindowEnumerator
{
76 nsASAppWindowEnumerator(const char16_t
* aTypeString
,
77 nsWindowMediator
& inMediator
);
78 virtual ~nsASAppWindowEnumerator();
79 NS_IMETHOD
GetNext(nsISupports
** retval
) override
;
81 const nsID
& DefaultInterface() override
{ return NS_GET_IID(nsIAppWindow
); }
85 // concrete enumerators
88 class nsASDOMWindowEarlyToLateEnumerator
: public nsASDOMWindowEnumerator
{
90 nsASDOMWindowEarlyToLateEnumerator(const char16_t
* aTypeString
,
91 nsWindowMediator
& inMediator
);
93 virtual ~nsASDOMWindowEarlyToLateEnumerator();
96 virtual nsWindowInfo
* FindNext() override
;
99 class nsASAppWindowEarlyToLateEnumerator
: public nsASAppWindowEnumerator
{
101 nsASAppWindowEarlyToLateEnumerator(const char16_t
* aTypeString
,
102 nsWindowMediator
& inMediator
);
104 virtual ~nsASAppWindowEarlyToLateEnumerator();
107 virtual nsWindowInfo
* FindNext() override
;
110 class nsASAppWindowFrontToBackEnumerator
: public nsASAppWindowEnumerator
{
112 nsASAppWindowFrontToBackEnumerator(const char16_t
* aTypeString
,
113 nsWindowMediator
& inMediator
);
115 virtual ~nsASAppWindowFrontToBackEnumerator();
118 virtual nsWindowInfo
* FindNext() override
;
121 class nsASAppWindowBackToFrontEnumerator
: public nsASAppWindowEnumerator
{
123 nsASAppWindowBackToFrontEnumerator(const char16_t
* aTypeString
,
124 nsWindowMediator
& inMediator
);
126 virtual ~nsASAppWindowBackToFrontEnumerator();
129 virtual nsWindowInfo
* FindNext() override
;