diff options
Diffstat (limited to 'xpfe/appshell/nsAppShellWindowEnumerator.h')
-rw-r--r-- | xpfe/appshell/nsAppShellWindowEnumerator.h | 166 |
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 |