Backed out changeset b71c8c052463 (bug 1943846) for causing mass failures. CLOSED...
[gecko.git] / xpfe / appshell / nsAppShellWindowEnumerator.h
blob51ae19c88c9a80453708ee7695f7d2588a957ec4
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 "nsSimpleEnumerator.h"
13 #include "nsIAppWindow.h"
15 class nsWindowMediator;
18 // nsWindowInfo
21 struct nsWindowInfo {
22 nsWindowInfo(nsIAppWindow* inWindow, int32_t inTimeStamp);
23 ~nsWindowInfo();
25 nsCOMPtr<nsIAppWindow> mWindow;
26 int32_t mTimeStamp;
28 // each struct is in two, independent, circular, doubly-linked lists
29 nsWindowInfo *mYounger, // next younger in sequence
30 *mOlder;
31 nsWindowInfo *mLower, // next lower in z-order
32 *mHigher;
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;
47 public:
48 nsAppShellWindowEnumerator(const char16_t* aTypeString,
49 nsWindowMediator& inMediator);
50 NS_IMETHOD GetNext(nsISupports** retval) override = 0;
51 NS_IMETHOD HasMoreElements(bool* retval) override;
53 protected:
54 ~nsAppShellWindowEnumerator() override;
56 void AdjustInitialPosition();
57 virtual nsWindowInfo* FindNext() = 0;
59 void WindowRemoved(nsWindowInfo* inInfo);
61 nsWindowMediator* mWindowMediator;
62 nsString mType;
63 nsWindowInfo* mCurrentPosition;
66 class nsASDOMWindowEnumerator : public nsAppShellWindowEnumerator {
67 public:
68 nsASDOMWindowEnumerator(const char16_t* aTypeString,
69 nsWindowMediator& inMediator);
70 virtual ~nsASDOMWindowEnumerator();
71 NS_IMETHOD GetNext(nsISupports** retval) override;
74 class nsASAppWindowEnumerator : public nsAppShellWindowEnumerator {
75 public:
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 {
89 public:
90 nsASDOMWindowEarlyToLateEnumerator(const char16_t* aTypeString,
91 nsWindowMediator& inMediator);
93 virtual ~nsASDOMWindowEarlyToLateEnumerator();
95 protected:
96 virtual nsWindowInfo* FindNext() override;
99 class nsASAppWindowEarlyToLateEnumerator : public nsASAppWindowEnumerator {
100 public:
101 nsASAppWindowEarlyToLateEnumerator(const char16_t* aTypeString,
102 nsWindowMediator& inMediator);
104 virtual ~nsASAppWindowEarlyToLateEnumerator();
106 protected:
107 virtual nsWindowInfo* FindNext() override;
110 class nsASAppWindowFrontToBackEnumerator : public nsASAppWindowEnumerator {
111 public:
112 nsASAppWindowFrontToBackEnumerator(const char16_t* aTypeString,
113 nsWindowMediator& inMediator);
115 virtual ~nsASAppWindowFrontToBackEnumerator();
117 protected:
118 virtual nsWindowInfo* FindNext() override;
121 class nsASAppWindowBackToFrontEnumerator : public nsASAppWindowEnumerator {
122 public:
123 nsASAppWindowBackToFrontEnumerator(const char16_t* aTypeString,
124 nsWindowMediator& inMediator);
126 virtual ~nsASAppWindowBackToFrontEnumerator();
128 protected:
129 virtual nsWindowInfo* FindNext() override;
132 #endif