DXR is a code search and navigation tool aimed at making sense of large projects. It supports full-text and regex searches as well as structural queries.

Implementation

Mercurial (b9a9e0b6f0df)

VCS Links

Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 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 "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 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 nsASXULWindowEnumerator : public nsAppShellWindowEnumerator {
 public:
  nsASXULWindowEnumerator(const char16_t* aTypeString,
                          nsWindowMediator& inMediator);
  virtual ~nsASXULWindowEnumerator();
  NS_IMETHOD GetNext(nsISupports** retval) override;

  const nsID& DefaultInterface() override { return NS_GET_IID(nsIXULWindow); }
};

//
// concrete enumerators
//

class nsASDOMWindowEarlyToLateEnumerator : public nsASDOMWindowEnumerator {
 public:
  nsASDOMWindowEarlyToLateEnumerator(const char16_t* aTypeString,
                                     nsWindowMediator& inMediator);

  virtual ~nsASDOMWindowEarlyToLateEnumerator();

 protected:
  virtual nsWindowInfo* FindNext() override;
};

class nsASXULWindowEarlyToLateEnumerator : public nsASXULWindowEnumerator {
 public:
  nsASXULWindowEarlyToLateEnumerator(const char16_t* aTypeString,
                                     nsWindowMediator& inMediator);

  virtual ~nsASXULWindowEarlyToLateEnumerator();

 protected:
  virtual nsWindowInfo* FindNext() override;
};

class nsASXULWindowFrontToBackEnumerator : public nsASXULWindowEnumerator {
 public:
  nsASXULWindowFrontToBackEnumerator(const char16_t* aTypeString,
                                     nsWindowMediator& inMediator);

  virtual ~nsASXULWindowFrontToBackEnumerator();

 protected:
  virtual nsWindowInfo* FindNext() override;
};

class nsASXULWindowBackToFrontEnumerator : public nsASXULWindowEnumerator {
 public:
  nsASXULWindowBackToFrontEnumerator(const char16_t* aTypeString,
                                     nsWindowMediator& inMediator);

  virtual ~nsASXULWindowBackToFrontEnumerator();

 protected:
  virtual nsWindowInfo* FindNext() override;
};

#endif