summaryrefslogtreecommitdiffstats
path: root/xpfe/appshell/nsAppShellWindowEnumerator.h
diff options
context:
space:
mode:
Diffstat (limited to 'xpfe/appshell/nsAppShellWindowEnumerator.h')
-rw-r--r--xpfe/appshell/nsAppShellWindowEnumerator.h133
1 files changed, 133 insertions, 0 deletions
diff --git a/xpfe/appshell/nsAppShellWindowEnumerator.h b/xpfe/appshell/nsAppShellWindowEnumerator.h
new file mode 100644
index 0000000000..b5dc828dcf
--- /dev/null
+++ b/xpfe/appshell/nsAppShellWindowEnumerator.h
@@ -0,0 +1,133 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#ifndef nsAppShellWindowEnumerator_h
+#define nsAppShellWindowEnumerator_h
+
+#include "nsCOMPtr.h"
+#include "nsString.h"
+
+#include "nsSimpleEnumerator.h"
+#include "nsIAppWindow.h"
+
+class nsWindowMediator;
+
+//
+// nsWindowInfo
+//
+
+struct nsWindowInfo {
+ nsWindowInfo(nsIAppWindow* inWindow, int32_t inTimeStamp);
+ ~nsWindowInfo();
+
+ nsCOMPtr<nsIAppWindow> mWindow;
+ int32_t mTimeStamp;
+ uint32_t mZLevel;
+
+ // each struct is in two, independent, circular, doubly-linked lists
+ nsWindowInfo *mYounger, // next younger in sequence
+ *mOlder;
+ nsWindowInfo *mLower, // next lower in z-order
+ *mHigher;
+
+ bool TypeEquals(const nsAString& aType);
+ void InsertAfter(nsWindowInfo* inOlder, nsWindowInfo* inHigher);
+ void Unlink(bool inAge, bool inZ);
+ void ReferenceSelf(bool inAge, bool inZ);
+};
+
+//
+// virtual enumerators
+//
+
+class nsAppShellWindowEnumerator : public nsSimpleEnumerator {
+ friend class nsWindowMediator;
+
+ public:
+ nsAppShellWindowEnumerator(const char16_t* aTypeString,
+ nsWindowMediator& inMediator);
+ NS_IMETHOD GetNext(nsISupports** retval) override = 0;
+ NS_IMETHOD HasMoreElements(bool* retval) override;
+
+ protected:
+ ~nsAppShellWindowEnumerator() override;
+
+ void AdjustInitialPosition();
+ virtual nsWindowInfo* FindNext() = 0;
+
+ void WindowRemoved(nsWindowInfo* inInfo);
+
+ nsWindowMediator* mWindowMediator;
+ nsString mType;
+ nsWindowInfo* mCurrentPosition;
+};
+
+class nsASDOMWindowEnumerator : public nsAppShellWindowEnumerator {
+ public:
+ nsASDOMWindowEnumerator(const char16_t* aTypeString,
+ nsWindowMediator& inMediator);
+ virtual ~nsASDOMWindowEnumerator();
+ NS_IMETHOD GetNext(nsISupports** retval) override;
+};
+
+class nsASAppWindowEnumerator : public nsAppShellWindowEnumerator {
+ public:
+ nsASAppWindowEnumerator(const char16_t* aTypeString,
+ nsWindowMediator& inMediator);
+ virtual ~nsASAppWindowEnumerator();
+ NS_IMETHOD GetNext(nsISupports** retval) override;
+
+ const nsID& DefaultInterface() override { return NS_GET_IID(nsIAppWindow); }
+};
+
+//
+// concrete enumerators
+//
+
+class nsASDOMWindowEarlyToLateEnumerator : public nsASDOMWindowEnumerator {
+ public:
+ nsASDOMWindowEarlyToLateEnumerator(const char16_t* aTypeString,
+ nsWindowMediator& inMediator);
+
+ virtual ~nsASDOMWindowEarlyToLateEnumerator();
+
+ protected:
+ virtual nsWindowInfo* FindNext() override;
+};
+
+class nsASAppWindowEarlyToLateEnumerator : public nsASAppWindowEnumerator {
+ public:
+ nsASAppWindowEarlyToLateEnumerator(const char16_t* aTypeString,
+ nsWindowMediator& inMediator);
+
+ virtual ~nsASAppWindowEarlyToLateEnumerator();
+
+ protected:
+ virtual nsWindowInfo* FindNext() override;
+};
+
+class nsASAppWindowFrontToBackEnumerator : public nsASAppWindowEnumerator {
+ public:
+ nsASAppWindowFrontToBackEnumerator(const char16_t* aTypeString,
+ nsWindowMediator& inMediator);
+
+ virtual ~nsASAppWindowFrontToBackEnumerator();
+
+ protected:
+ virtual nsWindowInfo* FindNext() override;
+};
+
+class nsASAppWindowBackToFrontEnumerator : public nsASAppWindowEnumerator {
+ public:
+ nsASAppWindowBackToFrontEnumerator(const char16_t* aTypeString,
+ nsWindowMediator& inMediator);
+
+ virtual ~nsASAppWindowBackToFrontEnumerator();
+
+ protected:
+ virtual nsWindowInfo* FindNext() override;
+};
+
+#endif