nsComposerCommandsUpdater.h 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
  2. *
  3. * This Source Code Form is subject to the terms of the Mozilla Public
  4. * License, v. 2.0. If a copy of the MPL was not distributed with this
  5. * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
  6. #ifndef nsComposerCommandsUpdater_h__
  7. #define nsComposerCommandsUpdater_h__
  8. #include "nsCOMPtr.h" // for already_AddRefed, nsCOMPtr
  9. #include "nsIDocumentStateListener.h"
  10. #include "nsISelectionListener.h"
  11. #include "nsISupportsImpl.h" // for NS_DECL_ISUPPORTS
  12. #include "nsITimer.h" // for NS_DECL_NSITIMERCALLBACK, etc
  13. #include "nsITransactionListener.h" // for nsITransactionListener
  14. #include "nsIWeakReferenceUtils.h" // for nsWeakPtr
  15. #include "nscore.h" // for NS_IMETHOD, nsresult, etc
  16. class nsPIDOMWindowOuter;
  17. class nsITransaction;
  18. class nsITransactionManager;
  19. class nsPICommandUpdater;
  20. class nsComposerCommandsUpdater : public nsISelectionListener,
  21. public nsIDocumentStateListener,
  22. public nsITransactionListener,
  23. public nsITimerCallback
  24. {
  25. public:
  26. nsComposerCommandsUpdater();
  27. // nsISupports
  28. NS_DECL_ISUPPORTS
  29. // nsISelectionListener
  30. NS_DECL_NSISELECTIONLISTENER
  31. // nsIDocumentStateListener
  32. NS_DECL_NSIDOCUMENTSTATELISTENER
  33. // nsITimerCallback interfaces
  34. NS_DECL_NSITIMERCALLBACK
  35. /** nsITransactionListener interfaces
  36. */
  37. NS_IMETHOD WillDo(nsITransactionManager *aManager, nsITransaction *aTransaction, bool *aInterrupt) override;
  38. NS_IMETHOD DidDo(nsITransactionManager *aManager, nsITransaction *aTransaction, nsresult aDoResult) override;
  39. NS_IMETHOD WillUndo(nsITransactionManager *aManager, nsITransaction *aTransaction, bool *aInterrupt) override;
  40. NS_IMETHOD DidUndo(nsITransactionManager *aManager, nsITransaction *aTransaction, nsresult aUndoResult) override;
  41. NS_IMETHOD WillRedo(nsITransactionManager *aManager, nsITransaction *aTransaction, bool *aInterrupt) override;
  42. NS_IMETHOD DidRedo(nsITransactionManager *aManager, nsITransaction *aTransaction, nsresult aRedoResult) override;
  43. NS_IMETHOD WillBeginBatch(nsITransactionManager *aManager, bool *aInterrupt) override;
  44. NS_IMETHOD DidBeginBatch(nsITransactionManager *aManager, nsresult aResult) override;
  45. NS_IMETHOD WillEndBatch(nsITransactionManager *aManager, bool *aInterrupt) override;
  46. NS_IMETHOD DidEndBatch(nsITransactionManager *aManager, nsresult aResult) override;
  47. NS_IMETHOD WillMerge(nsITransactionManager *aManager, nsITransaction *aTopTransaction,
  48. nsITransaction *aTransactionToMerge, bool *aInterrupt) override;
  49. NS_IMETHOD DidMerge(nsITransactionManager *aManager, nsITransaction *aTopTransaction,
  50. nsITransaction *aTransactionToMerge,
  51. bool aDidMerge, nsresult aMergeResult) override;
  52. nsresult Init(nsPIDOMWindowOuter* aDOMWindow);
  53. protected:
  54. virtual ~nsComposerCommandsUpdater();
  55. enum {
  56. eStateUninitialized = -1,
  57. eStateOff = false,
  58. eStateOn = true
  59. };
  60. bool SelectionIsCollapsed();
  61. nsresult UpdateDirtyState(bool aNowDirty);
  62. nsresult UpdateOneCommand(const char* aCommand);
  63. nsresult UpdateCommandGroup(const nsAString& aCommandGroup);
  64. already_AddRefed<nsPICommandUpdater> GetCommandUpdater();
  65. nsresult PrimeUpdateTimer();
  66. void TimerCallback();
  67. nsCOMPtr<nsITimer> mUpdateTimer;
  68. nsWeakPtr mDOMWindow;
  69. nsWeakPtr mDocShell;
  70. int8_t mDirtyState;
  71. int8_t mSelectionCollapsed;
  72. bool mFirstDoOfFirstUndo;
  73. };
  74. extern "C" nsresult NS_NewComposerCommandsUpdater(nsISelectionListener** aInstancePtrResult);
  75. #endif // nsComposerCommandsUpdater_h__