nsAppShellWindowEnumerator.h 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  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/. */
  5. #ifndef nsAppShellWindowEnumerator_h
  6. #define nsAppShellWindowEnumerator_h
  7. #include "nsCOMPtr.h"
  8. #include "nsString.h"
  9. #include "nsISimpleEnumerator.h"
  10. #include "nsIXULWindow.h"
  11. class nsWindowMediator;
  12. //
  13. // nsWindowInfo
  14. //
  15. struct nsWindowInfo
  16. {
  17. nsWindowInfo(nsIXULWindow* inWindow, int32_t inTimeStamp);
  18. ~nsWindowInfo();
  19. nsCOMPtr<nsIXULWindow> mWindow;
  20. int32_t mTimeStamp;
  21. uint32_t mZLevel;
  22. // each struct is in two, independent, circular, doubly-linked lists
  23. nsWindowInfo *mYounger, // next younger in sequence
  24. *mOlder;
  25. nsWindowInfo *mLower, // next lower in z-order
  26. *mHigher;
  27. bool TypeEquals(const nsAString &aType);
  28. void InsertAfter(nsWindowInfo *inOlder, nsWindowInfo *inHigher);
  29. void Unlink(bool inAge, bool inZ);
  30. void ReferenceSelf(bool inAge, bool inZ);
  31. };
  32. //
  33. // virtual enumerators
  34. //
  35. class nsAppShellWindowEnumerator : public nsISimpleEnumerator {
  36. friend class nsWindowMediator;
  37. public:
  38. nsAppShellWindowEnumerator(const char16_t* aTypeString,
  39. nsWindowMediator& inMediator);
  40. NS_IMETHOD GetNext(nsISupports **retval) override = 0;
  41. NS_IMETHOD HasMoreElements(bool *retval) override;
  42. NS_DECL_ISUPPORTS
  43. protected:
  44. virtual ~nsAppShellWindowEnumerator();
  45. void AdjustInitialPosition();
  46. virtual nsWindowInfo *FindNext() = 0;
  47. void WindowRemoved(nsWindowInfo *inInfo);
  48. nsWindowMediator *mWindowMediator;
  49. nsString mType;
  50. nsWindowInfo *mCurrentPosition;
  51. };
  52. class nsASDOMWindowEnumerator : public nsAppShellWindowEnumerator {
  53. public:
  54. nsASDOMWindowEnumerator(const char16_t* aTypeString,
  55. nsWindowMediator& inMediator);
  56. virtual ~nsASDOMWindowEnumerator();
  57. NS_IMETHOD GetNext(nsISupports **retval);
  58. };
  59. class nsASXULWindowEnumerator : public nsAppShellWindowEnumerator {
  60. public:
  61. nsASXULWindowEnumerator(const char16_t* aTypeString,
  62. nsWindowMediator& inMediator);
  63. virtual ~nsASXULWindowEnumerator();
  64. NS_IMETHOD GetNext(nsISupports **retval);
  65. };
  66. //
  67. // concrete enumerators
  68. //
  69. class nsASDOMWindowEarlyToLateEnumerator : public nsASDOMWindowEnumerator {
  70. public:
  71. nsASDOMWindowEarlyToLateEnumerator(const char16_t* aTypeString,
  72. nsWindowMediator& inMediator);
  73. virtual ~nsASDOMWindowEarlyToLateEnumerator();
  74. protected:
  75. virtual nsWindowInfo *FindNext();
  76. };
  77. class nsASXULWindowEarlyToLateEnumerator : public nsASXULWindowEnumerator {
  78. public:
  79. nsASXULWindowEarlyToLateEnumerator(const char16_t* aTypeString,
  80. nsWindowMediator& inMediator);
  81. virtual ~nsASXULWindowEarlyToLateEnumerator();
  82. protected:
  83. virtual nsWindowInfo *FindNext();
  84. };
  85. class nsASDOMWindowFrontToBackEnumerator : public nsASDOMWindowEnumerator {
  86. public:
  87. nsASDOMWindowFrontToBackEnumerator(const char16_t* aTypeString,
  88. nsWindowMediator& inMediator);
  89. virtual ~nsASDOMWindowFrontToBackEnumerator();
  90. protected:
  91. virtual nsWindowInfo *FindNext();
  92. };
  93. class nsASXULWindowFrontToBackEnumerator : public nsASXULWindowEnumerator {
  94. public:
  95. nsASXULWindowFrontToBackEnumerator(const char16_t* aTypeString,
  96. nsWindowMediator& inMediator);
  97. virtual ~nsASXULWindowFrontToBackEnumerator();
  98. protected:
  99. virtual nsWindowInfo *FindNext();
  100. };
  101. class nsASDOMWindowBackToFrontEnumerator : public nsASDOMWindowEnumerator {
  102. public:
  103. nsASDOMWindowBackToFrontEnumerator(const char16_t* aTypeString,
  104. nsWindowMediator& inMediator);
  105. virtual ~nsASDOMWindowBackToFrontEnumerator();
  106. protected:
  107. virtual nsWindowInfo *FindNext();
  108. };
  109. class nsASXULWindowBackToFrontEnumerator : public nsASXULWindowEnumerator {
  110. public:
  111. nsASXULWindowBackToFrontEnumerator(const char16_t* aTypeString,
  112. nsWindowMediator& inMediator);
  113. virtual ~nsASXULWindowBackToFrontEnumerator();
  114. protected:
  115. virtual nsWindowInfo *FindNext();
  116. };
  117. #endif