BUG115229 files not in build yet. checking in new files to make tree landing of editor embedded work go more smoothely

git-svn-id: svn://10.0.0.236/trunk@113197 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
mjudge%netscape.com
2002-01-30 05:15:42 +00:00
parent 0ddbd5c1fa
commit 1d98bc69e0
17 changed files with 995 additions and 125 deletions

View File

@@ -40,7 +40,6 @@
#include "nsIController.h"
#include "nsIObserver.h"
#include "nsIObserverList.h"
#include "nsIComponentManager.h"
@@ -48,6 +47,8 @@
#include "nsPIDOMWindow.h"
#include "nsIFocusController.h"
#include "nsSupportsArray.h"
#include "nsCommandManager.h"
@@ -83,38 +84,32 @@ nsCommandManager::Init(nsIDOMWindow *aWindow)
/* void commandStatusChanged (in DOMString aCommandName, in long aChangeFlags); */
NS_IMETHODIMP
nsCommandManager::CommandStatusChanged(const nsAReadableString & aCommandName, PRInt32 aChangeFlags)
nsCommandManager::CommandStatusChanged(const nsAString & aCommandName)
{
nsStringKey hashKey(aCommandName);
nsPromiseFlatString flatCommand = PromiseFlatString(aCommandName);
nsresult rv = NS_OK;
nsCOMPtr<nsISupports> commandSupports = getter_AddRefs(mCommandObserversTable.Get(&hashKey));
nsCOMPtr<nsIObserverList> commandObservers = do_QueryInterface(commandSupports);
nsCOMPtr<nsISupports> commandSupports = getter_AddRefs(mCommandObserversTable.Get(&hashKey));
nsCOMPtr<nsISupportsArray> commandObservers = do_QueryInterface(commandSupports);
if (commandObservers)
{
nsCOMPtr<nsIEnumerator> observers;
rv = commandObservers->EnumerateObserverList(getter_AddRefs(observers));
if (observers)
{
PRUint32 numItems;
rv = commandObservers->Count(&numItems);
if (NS_FAILED(rv)) return rv;
for (PRUint32 i = 0; i < numItems; i ++)
{
rv = observers->First();
// Continue until error or end of list.
while (observers->IsDone() != NS_OK && NS_SUCCEEDED(rv))
nsCOMPtr<nsISupports> itemSupports;
rv = commandObservers->GetElementAt(i, getter_AddRefs(itemSupports));
if (NS_FAILED(rv)) break;
nsCOMPtr<nsIObserver> itemObserver = do_QueryInterface(itemSupports);
if (itemObserver)
{
nsCOMPtr<nsISupports> itemSupports;
rv = observers->CurrentItem(getter_AddRefs(itemSupports));
nsCOMPtr<nsIObserver> itemObserver = do_QueryInterface(itemSupports);
if (itemObserver)
{
// should we get the command state to pass here? This might be expensive.
itemObserver->Observe((nsICommandManager *)this, flatCommand.get(), NS_LITERAL_STRING("").get());
}
rv = observers->Next();
// should we get the command state to pass here? This might be expensive.
itemObserver->Observe((nsICommandManager *)this, "command_status_changed", flatCommand.get());
}
}
}
@@ -127,7 +122,7 @@ nsCommandManager::CommandStatusChanged(const nsAReadableString & aCommandName, P
/* void addCommandObserver (in nsIObserver aCommandObserver, in wstring aCommandToObserve); */
NS_IMETHODIMP
nsCommandManager::AddCommandObserver(nsIObserver *aCommandObserver, const nsAReadableString & aCommandToObserve)
nsCommandManager::AddCommandObserver(nsIObserver *aCommandObserver, const nsAString & aCommandToObserve)
{
NS_ENSURE_ARG(aCommandObserver);
@@ -138,40 +133,50 @@ nsCommandManager::AddCommandObserver(nsIObserver *aCommandObserver, const nsARea
// for each command in the table, we make a list of observers for that command
nsStringKey hashKey(aCommandToObserve);
nsCOMPtr<nsISupports> commandSupports = getter_AddRefs(mCommandObserversTable.Get(&hashKey));
nsCOMPtr<nsIObserverList> commandObservers = do_QueryInterface(commandSupports);
nsCOMPtr<nsISupports> commandSupports = getter_AddRefs(mCommandObserversTable.Get(&hashKey));
nsCOMPtr<nsISupportsArray> commandObservers = do_QueryInterface(commandSupports);
if (!commandObservers)
{
commandObservers = do_CreateInstance("@mozilla.org/xpcom/observer-list;1", &rv);
rv = NS_NewISupportsArray(getter_AddRefs(commandObservers));
if (NS_FAILED(rv)) return rv;
rv = mCommandObserversTable.Put(&hashKey, commandObservers);
commandSupports = do_QueryInterface(commandObservers);
rv = mCommandObserversTable.Put(&hashKey, commandSupports);
if (NS_FAILED(rv)) return rv;
}
return commandObservers->AddObserver(aCommandObserver);
// need to check that this command observer hasn't already been registered
nsCOMPtr<nsISupports> observerAsSupports = do_QueryInterface(aCommandObserver);
PRInt32 existingIndex = commandObservers->IndexOf(observerAsSupports);
if (existingIndex == -1)
rv = commandObservers->AppendElement(observerAsSupports);
else
NS_WARNING("Registering command observer twice on the same command");
return rv;
}
/* void removeCommandObserver (in nsIObserver aCommandObserver, in wstring aCommandObserved); */
NS_IMETHODIMP
nsCommandManager::RemoveCommandObserver(nsIObserver *aCommandObserver, const nsAReadableString & aCommandObserved)
nsCommandManager::RemoveCommandObserver(nsIObserver *aCommandObserver, const nsAString & aCommandObserved)
{
NS_ENSURE_ARG(aCommandObserver);
// XXX todo: handle special cases of aCommandToObserve being null, or empty
nsStringKey hashKey(aCommandObserved);
nsCOMPtr<nsISupports> commandSupports = getter_AddRefs(mCommandObserversTable.Get(&hashKey));
nsCOMPtr<nsIObserverList> commandObservers = do_QueryInterface(commandSupports);
nsCOMPtr<nsISupports> commandSupports = getter_AddRefs(mCommandObserversTable.Get(&hashKey));
nsCOMPtr<nsISupportsArray> commandObservers = do_QueryInterface(commandSupports);
if (!commandObservers)
return NS_ERROR_UNEXPECTED;
return commandObservers->RemoveObserver(aCommandObserver);
nsresult removed = commandObservers->RemoveElement(aCommandObserver);
return (removed) ? NS_OK : NS_ERROR_FAILURE;
}
/* boolean isCommandSupported (in wstring aCommandName); */
NS_IMETHODIMP
nsCommandManager::IsCommandSupported(const nsAReadableString & aCommandName, PRBool *outCommandSupported)
nsCommandManager::IsCommandSupported(const nsAString & aCommandName, PRBool *outCommandSupported)
{
NS_ENSURE_ARG_POINTER(outCommandSupported);
@@ -183,7 +188,7 @@ nsCommandManager::IsCommandSupported(const nsAReadableString & aCommandName, PRB
/* boolean isCommandEnabled (in wstring aCommandName); */
NS_IMETHODIMP
nsCommandManager::IsCommandEnabled(const nsAReadableString & aCommandName, PRBool *outCommandEnabled)
nsCommandManager::IsCommandEnabled(const nsAString & aCommandName, PRBool *outCommandEnabled)
{
NS_ENSURE_ARG_POINTER(outCommandEnabled);
@@ -199,24 +204,60 @@ nsCommandManager::IsCommandEnabled(const nsAReadableString & aCommandName, PRBoo
return NS_OK;
}
/* void doCommand (in wstring aCommandName, in wstring aCommandParams); */
#define COMMAND_NAME NS_ConvertASCIItoUCS2("cmd_name")
/* void getCommandState (in DOMString aCommandName, inout nsICommandParams aCommandParams); */
NS_IMETHODIMP
nsCommandManager::DoCommand(const nsAReadableString & aCommandName)
nsCommandManager::GetCommandState(nsICommandParams *aCommandParams)
{
nsCOMPtr<nsIController> controller;
nsresult rv = GetControllerForCommand(aCommandName, getter_AddRefs(controller));
if (!controller)
return NS_ERROR_FAILURE;
return controller->DoCommand(aCommandName);
nsAutoString tValue;
nsresult rv;
if (NS_SUCCEEDED(rv = aCommandParams->GetStringValue(COMMAND_NAME,tValue)))
{
nsresult rv = GetControllerForCommand(tValue, getter_AddRefs(controller));
if (!controller)
return NS_ERROR_FAILURE;
nsCOMPtr<nsICommandController> commandController = do_QueryInterface(controller);
if (commandController)
rv = commandController->GetCommandState(aCommandParams);
else
rv = NS_ERROR_NOT_IMPLEMENTED;
}
return rv;
}
/* void doCommand (nsICommandParams aCommandParams); */
#define COMMAND_NAME NS_ConvertASCIItoUCS2("cmd_name")
NS_IMETHODIMP
nsCommandManager::DoCommand(nsICommandParams *aCommandParams)
{
nsCOMPtr<nsIController> controller;
nsAutoString tValue;
nsresult rv;
if (NS_SUCCEEDED(rv = aCommandParams->GetStringValue(COMMAND_NAME,tValue)))
{
nsresult rv = GetControllerForCommand(tValue, getter_AddRefs(controller));
if (!controller)
return NS_ERROR_FAILURE;
nsCOMPtr<nsICommandController> commandController = do_QueryInterface(controller);
if (commandController)
rv = commandController->DoCommand(aCommandParams);
else
rv = controller->DoCommand(tValue);
}
return rv;
}
#ifdef XP_MAC
#pragma mark -
#endif
NS_IMETHODIMP
nsCommandManager::GetControllerForCommand(const nsAReadableString& aCommand, nsIController** outController)
nsresult
nsCommandManager::GetControllerForCommand(const nsAString& aCommand, nsIController** outController)
{
nsresult rv = NS_ERROR_FAILURE;
@@ -229,6 +270,6 @@ nsCommandManager::GetControllerForCommand(const nsAReadableString& aCommand, nsI
if (!focusController)
return NS_ERROR_FAILURE;
return focusController->GetControllerForCommand(aCommand, getter_AddRefs(outController));
return focusController->GetControllerForCommand(aCommand, outController);
}