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.h166
1 files changed, 166 insertions, 0 deletions
diff --git a/xpfe/appshell/nsAppShellWindowEnumerator.h b/xpfe/appshell/nsAppShellWindowEnumerator.h
new file mode 100644
index 000000000..f9a8a2d52
--- /dev/null
+++ b/xpfe/appshell/nsAppShellWindowEnumerator.h
@@ -0,0 +1,166 @@
+/* -*- 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 "nsISimpleEnumerator.h"
+#include "nsIXULWindow.h"
+
+class nsWindowMediator;
+
+//
+// nsWindowInfo
+//
+
+struct nsWindowInfo
+{
+ nsWindowInfo(nsIXULWindow* inWindow, int32_t inTimeStamp);
+ ~nsWindowInfo();
+
+ nsCOMPtr<nsIXULWindow> 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 nsISimpleEnumerator {
+
+friend class nsWindowMediator;
+
+public:
+ nsAppShellWindowEnumerator(const char16_t* aTypeString,
+ nsWindowMediator& inMediator);
+ NS_IMETHOD GetNext(nsISupports **retval) override = 0;
+ NS_IMETHOD HasMoreElements(bool *retval) override;
+
+ NS_DECL_ISUPPORTS
+
+protected:
+
+ virtual ~nsAppShellWindowEnumerator();
+
+ 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);
+};
+
+class nsASXULWindowEnumerator : public nsAppShellWindowEnumerator {
+
+public:
+ nsASXULWindowEnumerator(const char16_t* aTypeString,
+ nsWindowMediator& inMediator);
+ virtual ~nsASXULWindowEnumerator();
+ NS_IMETHOD GetNext(nsISupports **retval);
+};
+
+//
+// concrete enumerators
+//
+
+class nsASDOMWindowEarlyToLateEnumerator : public nsASDOMWindowEnumerator {
+
+public:
+ nsASDOMWindowEarlyToLateEnumerator(const char16_t* aTypeString,
+ nsWindowMediator& inMediator);
+
+ virtual ~nsASDOMWindowEarlyToLateEnumerator();
+
+protected:
+ virtual nsWindowInfo *FindNext();
+};
+
+class nsASXULWindowEarlyToLateEnumerator : public nsASXULWindowEnumerator {
+
+public:
+ nsASXULWindowEarlyToLateEnumerator(const char16_t* aTypeString,
+ nsWindowMediator& inMediator);
+
+ virtual ~nsASXULWindowEarlyToLateEnumerator();
+
+protected:
+ virtual nsWindowInfo *FindNext();
+};
+
+class nsASDOMWindowFrontToBackEnumerator : public nsASDOMWindowEnumerator {
+
+public:
+ nsASDOMWindowFrontToBackEnumerator(const char16_t* aTypeString,
+ nsWindowMediator& inMediator);
+
+ virtual ~nsASDOMWindowFrontToBackEnumerator();
+
+protected:
+ virtual nsWindowInfo *FindNext();
+};
+
+class nsASXULWindowFrontToBackEnumerator : public nsASXULWindowEnumerator {
+
+public:
+ nsASXULWindowFrontToBackEnumerator(const char16_t* aTypeString,
+ nsWindowMediator& inMediator);
+
+ virtual ~nsASXULWindowFrontToBackEnumerator();
+
+protected:
+ virtual nsWindowInfo *FindNext();
+};
+
+class nsASDOMWindowBackToFrontEnumerator : public nsASDOMWindowEnumerator {
+
+public:
+ nsASDOMWindowBackToFrontEnumerator(const char16_t* aTypeString,
+ nsWindowMediator& inMediator);
+
+ virtual ~nsASDOMWindowBackToFrontEnumerator();
+
+protected:
+ virtual nsWindowInfo *FindNext();
+};
+
+class nsASXULWindowBackToFrontEnumerator : public nsASXULWindowEnumerator {
+
+public:
+ nsASXULWindowBackToFrontEnumerator(const char16_t* aTypeString,
+ nsWindowMediator& inMediator);
+
+ virtual ~nsASXULWindowBackToFrontEnumerator();
+
+protected:
+ virtual nsWindowInfo *FindNext();
+};
+
+#endif