123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167 |
- /* -*- 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
|