r=akkana sr=sfrasier 125146 a=asa This patch will make the embedding API's a better friend to all. It eliminates the use of multibyte strings in command names and also allows for simple command to not require the nsICommandParams interface to be filled.
git-svn-id: svn://10.0.0.236/trunk@125242 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
@@ -45,6 +45,7 @@
|
||||
|
||||
#include "nsCommandGroup.h"
|
||||
#include "nsIControllerCommand.h"
|
||||
#include "nsCRT.h"
|
||||
|
||||
|
||||
class nsGroupsEnumerator : public nsISimpleEnumerator
|
||||
@@ -66,7 +67,7 @@ protected:
|
||||
|
||||
nsHashtable& mHashTable;
|
||||
PRInt32 mIndex;
|
||||
PRUnichar** mGroupNames; // array of pointers to PRUnichar* in the hash table
|
||||
char ** mGroupNames; // array of pointers to PRUnichar* in the hash table
|
||||
PRBool mInitted;
|
||||
|
||||
};
|
||||
@@ -123,9 +124,9 @@ nsGroupsEnumerator::GetNext(nsISupports **_retval)
|
||||
if (mIndex >= mHashTable.Count())
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
PRUnichar *thisGroupName = mGroupNames[mIndex];
|
||||
char *thisGroupName = mGroupNames[mIndex];
|
||||
|
||||
nsCOMPtr<nsISupportsWString> supportsString = do_CreateInstance(NS_SUPPORTS_WSTRING_CONTRACTID, &rv);
|
||||
nsCOMPtr<nsISupportsString> supportsString = do_CreateInstance(NS_SUPPORTS_STRING_CONTRACTID, &rv);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
supportsString->SetData(thisGroupName);
|
||||
@@ -138,9 +139,9 @@ PRBool
|
||||
nsGroupsEnumerator::HashEnum(nsHashKey *aKey, void *aData, void* aClosure)
|
||||
{
|
||||
nsGroupsEnumerator* groupsEnum = NS_REINTERPRET_CAST(nsGroupsEnumerator *, aClosure);
|
||||
nsStringKey* stringKey = NS_STATIC_CAST(nsStringKey*, aKey);
|
||||
nsCStringKey* stringKey = NS_STATIC_CAST(nsCStringKey*, aKey);
|
||||
|
||||
groupsEnum->mGroupNames[groupsEnum->mIndex] = (PRUnichar*)stringKey->GetString();
|
||||
groupsEnum->mGroupNames[groupsEnum->mIndex] = (char*)stringKey->GetString();
|
||||
groupsEnum->mIndex ++;
|
||||
return PR_TRUE;
|
||||
}
|
||||
@@ -150,7 +151,7 @@ nsGroupsEnumerator::Initialize()
|
||||
{
|
||||
if (mInitted) return NS_OK;
|
||||
|
||||
mGroupNames = new PRUnichar*[mHashTable.Count()];
|
||||
mGroupNames = new char*[mHashTable.Count()];
|
||||
if (!mGroupNames) return NS_ERROR_OUT_OF_MEMORY;
|
||||
|
||||
mIndex = 0;
|
||||
@@ -258,9 +259,9 @@ nsControllerCommandGroup::ClearGroupsHash()
|
||||
|
||||
/* void addCommandToGroup (in DOMString aCommand, in DOMString aGroup); */
|
||||
NS_IMETHODIMP
|
||||
nsControllerCommandGroup::AddCommandToGroup(const nsAString & aCommand, const nsAString & aGroup)
|
||||
nsControllerCommandGroup::AddCommandToGroup(const char * aCommand, const char *aGroup)
|
||||
{
|
||||
nsStringKey groupKey(aGroup);
|
||||
nsCStringKey groupKey(aGroup);
|
||||
nsVoidArray* commandList;
|
||||
if ((commandList = (nsVoidArray *)mGroupsHash.Get(&groupKey)) == nsnull)
|
||||
{
|
||||
@@ -269,7 +270,7 @@ nsControllerCommandGroup::AddCommandToGroup(const nsAString & aCommand, const ns
|
||||
mGroupsHash.Put(&groupKey, (void *)commandList);
|
||||
}
|
||||
// add the command to the list. Note that we're not checking for duplicates here
|
||||
PRUnichar* commandString = ToNewUnicode(aCommand); // we store allocated PRUnichar* in the array
|
||||
char* commandString = nsCRT::strdup(aCommand); // we store allocated PRUnichar* in the array
|
||||
if (!commandString) return NS_ERROR_OUT_OF_MEMORY;
|
||||
|
||||
PRBool appended = commandList->AppendElement((void *)commandString);
|
||||
@@ -280,17 +281,17 @@ nsControllerCommandGroup::AddCommandToGroup(const nsAString & aCommand, const ns
|
||||
|
||||
/* void removeCommandFromGroup (in DOMString aCommand, in DOMString aGroup); */
|
||||
NS_IMETHODIMP
|
||||
nsControllerCommandGroup::RemoveCommandFromGroup(const nsAString & aCommand, const nsAString & aGroup)
|
||||
nsControllerCommandGroup::RemoveCommandFromGroup(const char * aCommand, const char * aGroup)
|
||||
{
|
||||
nsStringKey groupKey(aGroup);
|
||||
nsCStringKey groupKey(aGroup);
|
||||
nsVoidArray* commandList = (nsVoidArray *)mGroupsHash.Get(&groupKey);
|
||||
if (!commandList) return NS_OK; // no group
|
||||
|
||||
PRInt32 numEntries = commandList->Count();
|
||||
for (PRInt32 i = 0; i < numEntries; i ++)
|
||||
{
|
||||
PRUnichar* commandString = (PRUnichar*)commandList->ElementAt(i);
|
||||
if (aCommand.Equals(commandString))
|
||||
char* commandString = (char*)commandList->ElementAt(i);
|
||||
if (!nsCRT::strcmp(aCommand,commandString))
|
||||
{
|
||||
commandList->RemoveElementAt(i);
|
||||
nsMemory::Free(commandString);
|
||||
@@ -303,20 +304,20 @@ nsControllerCommandGroup::RemoveCommandFromGroup(const nsAString & aCommand, con
|
||||
|
||||
/* boolean isCommandInGroup (in DOMString aCommand, in DOMString aGroup); */
|
||||
NS_IMETHODIMP
|
||||
nsControllerCommandGroup::IsCommandInGroup(const nsAString & aCommand, const nsAString & aGroup, PRBool *_retval)
|
||||
nsControllerCommandGroup::IsCommandInGroup(const char * aCommand, const char * aGroup, PRBool *_retval)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(_retval);
|
||||
*_retval = PR_FALSE;
|
||||
|
||||
nsStringKey groupKey(aGroup);
|
||||
nsCStringKey groupKey(aGroup);
|
||||
nsVoidArray* commandList = (nsVoidArray *)mGroupsHash.Get(&groupKey);
|
||||
if (!commandList) return NS_OK; // no group
|
||||
|
||||
PRInt32 numEntries = commandList->Count();
|
||||
for (PRInt32 i = 0; i < numEntries; i ++)
|
||||
{
|
||||
PRUnichar* commandString = (PRUnichar*)commandList->ElementAt(i);
|
||||
if (aCommand.Equals(commandString))
|
||||
char* commandString = (char*)commandList->ElementAt(i);
|
||||
if (!nsCRT::strcmp(aCommand,commandString))
|
||||
{
|
||||
*_retval = PR_TRUE;
|
||||
break;
|
||||
@@ -337,9 +338,9 @@ nsControllerCommandGroup::GetGroupsEnumerator(nsISimpleEnumerator **_retval)
|
||||
|
||||
/* nsISimpleEnumerator getEnumeratorForGroup (in DOMString aGroup); */
|
||||
NS_IMETHODIMP
|
||||
nsControllerCommandGroup::GetEnumeratorForGroup(const nsAString & aGroup, nsISimpleEnumerator **_retval)
|
||||
nsControllerCommandGroup::GetEnumeratorForGroup(const char * aGroup, nsISimpleEnumerator **_retval)
|
||||
{
|
||||
nsStringKey groupKey(aGroup);
|
||||
nsCStringKey groupKey(aGroup);
|
||||
nsVoidArray* commandList = (nsVoidArray *)mGroupsHash.Get(&groupKey); // may be null
|
||||
|
||||
nsNamedGroupEnumerator* theGroupEnum = new nsNamedGroupEnumerator(commandList);
|
||||
@@ -360,7 +361,7 @@ PRBool nsControllerCommandGroup::ClearEnumerator(nsHashKey *aKey, void *aData, v
|
||||
PRInt32 numEntries = commandList->Count();
|
||||
for (PRInt32 i = 0; i < numEntries; i ++)
|
||||
{
|
||||
PRUnichar* commandString = (PRUnichar*)commandList->ElementAt(i);
|
||||
char* commandString = (char*)commandList->ElementAt(i);
|
||||
nsMemory::Free(commandString);
|
||||
}
|
||||
|
||||
|
||||
@@ -84,11 +84,10 @@ nsCommandManager::Init(nsIDOMWindow *aWindow)
|
||||
|
||||
/* void commandStatusChanged (in DOMString aCommandName, in long aChangeFlags); */
|
||||
NS_IMETHODIMP
|
||||
nsCommandManager::CommandStatusChanged(const nsAString & aCommandName)
|
||||
nsCommandManager::CommandStatusChanged(const char * aCommandName)
|
||||
{
|
||||
nsStringKey hashKey(aCommandName);
|
||||
nsCStringKey hashKey(aCommandName);
|
||||
|
||||
nsPromiseFlatString flatCommand = PromiseFlatString(aCommandName);
|
||||
|
||||
nsresult rv = NS_OK;
|
||||
nsCOMPtr<nsISupports> commandSupports = getter_AddRefs(mCommandObserversTable.Get(&hashKey));
|
||||
@@ -108,7 +107,7 @@ nsCommandManager::CommandStatusChanged(const nsAString & aCommandName)
|
||||
if (itemObserver)
|
||||
{
|
||||
// should we get the command state to pass here? This might be expensive.
|
||||
itemObserver->Observe((nsICommandManager *)this, "command_status_changed", flatCommand.get());
|
||||
itemObserver->Observe((nsICommandManager *)this, aCommandName,NS_LITERAL_STRING("command_status_changed").get());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -122,7 +121,7 @@ nsCommandManager::CommandStatusChanged(const nsAString & aCommandName)
|
||||
|
||||
/* void addCommandObserver (in nsIObserver aCommandObserver, in wstring aCommandToObserve); */
|
||||
NS_IMETHODIMP
|
||||
nsCommandManager::AddCommandObserver(nsIObserver *aCommandObserver, const nsAString & aCommandToObserve)
|
||||
nsCommandManager::AddCommandObserver(nsIObserver *aCommandObserver, const char *aCommandToObserve)
|
||||
{
|
||||
NS_ENSURE_ARG(aCommandObserver);
|
||||
|
||||
@@ -131,7 +130,7 @@ nsCommandManager::AddCommandObserver(nsIObserver *aCommandObserver, const nsAStr
|
||||
// XXX todo: handle special cases of aCommandToObserve being null, or empty
|
||||
|
||||
// for each command in the table, we make a list of observers for that command
|
||||
nsStringKey hashKey(aCommandToObserve);
|
||||
nsCStringKey hashKey(aCommandToObserve);
|
||||
|
||||
nsCOMPtr<nsISupports> commandSupports = getter_AddRefs(mCommandObserversTable.Get(&hashKey));
|
||||
nsCOMPtr<nsISupportsArray> commandObservers = do_QueryInterface(commandSupports);
|
||||
@@ -158,12 +157,12 @@ nsCommandManager::AddCommandObserver(nsIObserver *aCommandObserver, const nsAStr
|
||||
|
||||
/* void removeCommandObserver (in nsIObserver aCommandObserver, in wstring aCommandObserved); */
|
||||
NS_IMETHODIMP
|
||||
nsCommandManager::RemoveCommandObserver(nsIObserver *aCommandObserver, const nsAString & aCommandObserved)
|
||||
nsCommandManager::RemoveCommandObserver(nsIObserver *aCommandObserver, const char *aCommandObserved)
|
||||
{
|
||||
NS_ENSURE_ARG(aCommandObserver);
|
||||
|
||||
// XXX todo: handle special cases of aCommandToObserve being null, or empty
|
||||
nsStringKey hashKey(aCommandObserved);
|
||||
nsCStringKey hashKey(aCommandObserved);
|
||||
|
||||
nsCOMPtr<nsISupports> commandSupports = getter_AddRefs(mCommandObserversTable.Get(&hashKey));
|
||||
nsCOMPtr<nsISupportsArray> commandObservers = do_QueryInterface(commandSupports);
|
||||
@@ -176,7 +175,7 @@ nsCommandManager::RemoveCommandObserver(nsIObserver *aCommandObserver, const nsA
|
||||
|
||||
/* boolean isCommandSupported (in wstring aCommandName); */
|
||||
NS_IMETHODIMP
|
||||
nsCommandManager::IsCommandSupported(const nsAString & aCommandName, PRBool *outCommandSupported)
|
||||
nsCommandManager::IsCommandSupported(const char *aCommandName, PRBool *outCommandSupported)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(outCommandSupported);
|
||||
|
||||
@@ -188,7 +187,7 @@ nsCommandManager::IsCommandSupported(const nsAString & aCommandName, PRBool *out
|
||||
|
||||
/* boolean isCommandEnabled (in wstring aCommandName); */
|
||||
NS_IMETHODIMP
|
||||
nsCommandManager::IsCommandEnabled(const nsAString & aCommandName, PRBool *outCommandEnabled)
|
||||
nsCommandManager::IsCommandEnabled(const char *aCommandName, PRBool *outCommandEnabled)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(outCommandEnabled);
|
||||
|
||||
@@ -204,51 +203,40 @@ nsCommandManager::IsCommandEnabled(const nsAString & aCommandName, PRBool *outCo
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
#define COMMAND_NAME NS_ConvertASCIItoUCS2("cmd_name")
|
||||
|
||||
/* void getCommandState (in DOMString aCommandName, inout nsICommandParams aCommandParams); */
|
||||
NS_IMETHODIMP
|
||||
nsCommandManager::GetCommandState(nsICommandParams *aCommandParams)
|
||||
nsCommandManager::GetCommandState(const char *aCommandName, 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->GetCommandState(aCommandParams);
|
||||
else
|
||||
rv = NS_ERROR_NOT_IMPLEMENTED;
|
||||
}
|
||||
nsresult rv = GetControllerForCommand(aCommandName, getter_AddRefs(controller));
|
||||
if (!controller)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
nsCOMPtr<nsICommandController> commandController = do_QueryInterface(controller);
|
||||
if (commandController)
|
||||
rv = commandController->GetCommandState(aCommandName,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)
|
||||
nsCommandManager::DoCommand(const char *aCommandName, 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;
|
||||
nsresult rv = GetControllerForCommand(aCommandName, 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);
|
||||
}
|
||||
nsCOMPtr<nsICommandController> commandController = do_QueryInterface(controller);
|
||||
if (commandController)
|
||||
rv = commandController->DoCommand(aCommandName,aCommandParams);
|
||||
else
|
||||
rv = controller->DoCommand(aCommandName);
|
||||
return rv;
|
||||
}
|
||||
|
||||
@@ -257,7 +245,7 @@ nsCommandManager::DoCommand(nsICommandParams *aCommandParams)
|
||||
#endif
|
||||
|
||||
nsresult
|
||||
nsCommandManager::GetControllerForCommand(const nsAString& aCommand, nsIController** outController)
|
||||
nsCommandManager::GetControllerForCommand(const char *aCommand, nsIController** outController)
|
||||
{
|
||||
nsresult rv = NS_ERROR_FAILURE;
|
||||
|
||||
|
||||
@@ -73,7 +73,7 @@ public:
|
||||
protected:
|
||||
|
||||
|
||||
nsresult GetControllerForCommand(const nsAString& aCommand, nsIController** outController);
|
||||
nsresult GetControllerForCommand(const char * aCommand, nsIController** outController);
|
||||
|
||||
|
||||
protected:
|
||||
|
||||
@@ -85,7 +85,7 @@ nsCommandParams::Init()
|
||||
#endif
|
||||
|
||||
/* short getValueType (in string name); */
|
||||
NS_IMETHODIMP nsCommandParams::GetValueType(const nsAString & name, PRInt16 *_retval)
|
||||
NS_IMETHODIMP nsCommandParams::GetValueType(const char * name, PRInt16 *_retval)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(_retval);
|
||||
*_retval = eNoType;
|
||||
@@ -100,7 +100,7 @@ NS_IMETHODIMP nsCommandParams::GetValueType(const nsAString & name, PRInt16 *_re
|
||||
}
|
||||
|
||||
/* boolean getBooleanValue (in AString name); */
|
||||
NS_IMETHODIMP nsCommandParams::GetBooleanValue(const nsAString & name, PRBool *_retval)
|
||||
NS_IMETHODIMP nsCommandParams::GetBooleanValue(const char * name, PRBool *_retval)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(_retval);
|
||||
*_retval = PR_FALSE;
|
||||
@@ -116,7 +116,7 @@ NS_IMETHODIMP nsCommandParams::GetBooleanValue(const nsAString & name, PRBool *_
|
||||
}
|
||||
|
||||
/* long getLongValue (in AString name); */
|
||||
NS_IMETHODIMP nsCommandParams::GetLongValue(const nsAString & name, PRInt32 *_retval)
|
||||
NS_IMETHODIMP nsCommandParams::GetLongValue(const char * name, PRInt32 *_retval)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(_retval);
|
||||
*_retval = PR_FALSE;
|
||||
@@ -132,7 +132,7 @@ NS_IMETHODIMP nsCommandParams::GetLongValue(const nsAString & name, PRInt32 *_re
|
||||
}
|
||||
|
||||
/* double getDoubleValue (in AString name); */
|
||||
NS_IMETHODIMP nsCommandParams::GetDoubleValue(const nsAString & name, double *_retval)
|
||||
NS_IMETHODIMP nsCommandParams::GetDoubleValue(const char * name, double *_retval)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(_retval);
|
||||
*_retval = 0.0;
|
||||
@@ -148,7 +148,7 @@ NS_IMETHODIMP nsCommandParams::GetDoubleValue(const nsAString & name, double *_r
|
||||
}
|
||||
|
||||
/* AString getStringValue (in AString name); */
|
||||
NS_IMETHODIMP nsCommandParams::GetStringValue(const nsAString & name, nsAString & _retval)
|
||||
NS_IMETHODIMP nsCommandParams::GetStringValue(const char *name, nsAString & _retval)
|
||||
{
|
||||
_retval.Truncate();
|
||||
HashEntry* foundEntry = GetNamedEntry(name);
|
||||
@@ -162,8 +162,22 @@ NS_IMETHODIMP nsCommandParams::GetStringValue(const nsAString & name, nsAString
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
/* AString getStringValue (in AString name); */
|
||||
NS_IMETHODIMP nsCommandParams::GetCStringValue(const char * name, char **_retval)
|
||||
{
|
||||
HashEntry* foundEntry = GetNamedEntry(name);
|
||||
if (foundEntry && foundEntry->mEntryType == eStringType)
|
||||
{
|
||||
NS_ASSERTION(foundEntry->mCString, "Null string");
|
||||
*_retval= nsCRT::strdup((*foundEntry->mCString).get());
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
/* nsISupports getISupportsValue (in AString name); */
|
||||
NS_IMETHODIMP nsCommandParams::GetISupportsValue(const nsAString & name, nsISupports **_retval)
|
||||
NS_IMETHODIMP nsCommandParams::GetISupportsValue(const char * name, nsISupports **_retval)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(_retval);
|
||||
*_retval = nsnull;
|
||||
@@ -183,7 +197,7 @@ NS_IMETHODIMP nsCommandParams::GetISupportsValue(const nsAString & name, nsISupp
|
||||
#endif
|
||||
|
||||
/* void setBooleanValue (in AString name, in boolean value); */
|
||||
NS_IMETHODIMP nsCommandParams::SetBooleanValue(const nsAString & name, PRBool value)
|
||||
NS_IMETHODIMP nsCommandParams::SetBooleanValue(const char * name, PRBool value)
|
||||
{
|
||||
HashEntry* foundEntry;
|
||||
GetOrMakeEntry(name, eBooleanType, foundEntry);
|
||||
@@ -195,7 +209,7 @@ NS_IMETHODIMP nsCommandParams::SetBooleanValue(const nsAString & name, PRBool va
|
||||
}
|
||||
|
||||
/* void setLongValue (in AString name, in long value); */
|
||||
NS_IMETHODIMP nsCommandParams::SetLongValue(const nsAString & name, PRInt32 value)
|
||||
NS_IMETHODIMP nsCommandParams::SetLongValue(const char * name, PRInt32 value)
|
||||
{
|
||||
HashEntry* foundEntry;
|
||||
GetOrMakeEntry(name, eLongType, foundEntry);
|
||||
@@ -206,7 +220,7 @@ NS_IMETHODIMP nsCommandParams::SetLongValue(const nsAString & name, PRInt32 valu
|
||||
}
|
||||
|
||||
/* void setDoubleValue (in AString name, in double value); */
|
||||
NS_IMETHODIMP nsCommandParams::SetDoubleValue(const nsAString & name, double value)
|
||||
NS_IMETHODIMP nsCommandParams::SetDoubleValue(const char * name, double value)
|
||||
{
|
||||
HashEntry* foundEntry;
|
||||
GetOrMakeEntry(name, eDoubleType, foundEntry);
|
||||
@@ -217,7 +231,7 @@ NS_IMETHODIMP nsCommandParams::SetDoubleValue(const nsAString & name, double val
|
||||
}
|
||||
|
||||
/* void setStringValue (in AString name, in AString value); */
|
||||
NS_IMETHODIMP nsCommandParams::SetStringValue(const nsAString & name, const nsAString & value)
|
||||
NS_IMETHODIMP nsCommandParams::SetStringValue(const char * name, const nsAString & value)
|
||||
{
|
||||
HashEntry* foundEntry;
|
||||
GetOrMakeEntry(name, eWStringType, foundEntry);
|
||||
@@ -227,8 +241,19 @@ NS_IMETHODIMP nsCommandParams::SetStringValue(const nsAString & name, const nsAS
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
/* void setCStringValue (in string name, in string value); */
|
||||
NS_IMETHODIMP nsCommandParams::SetCStringValue(const char * name, const char * value)
|
||||
{
|
||||
HashEntry* foundEntry;
|
||||
GetOrMakeEntry(name, eStringType, foundEntry);
|
||||
if (!foundEntry)
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
foundEntry->mCString = new nsCString(value);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
/* void setISupportsValue (in AString name, in nsISupports value); */
|
||||
NS_IMETHODIMP nsCommandParams::SetISupportsValue(const nsAString & name, nsISupports *value)
|
||||
NS_IMETHODIMP nsCommandParams::SetISupportsValue(const char * name, nsISupports *value)
|
||||
{
|
||||
HashEntry* foundEntry;
|
||||
GetOrMakeEntry(name, eISupportsType, foundEntry);
|
||||
@@ -240,12 +265,11 @@ NS_IMETHODIMP nsCommandParams::SetISupportsValue(const nsAString & name, nsISupp
|
||||
|
||||
/* void removeValue (in AString name); */
|
||||
NS_IMETHODIMP
|
||||
nsCommandParams::RemoveValue(const nsAString & name)
|
||||
nsCommandParams::RemoveValue(const char * name)
|
||||
{
|
||||
nsPromiseFlatString flatName = PromiseFlatString(name);
|
||||
// PL_DHASH_REMOVE doesn't tell us if the entry was really removed, so we return
|
||||
// NS_OK unconditionally.
|
||||
(void)PL_DHashTableOperate(&mValuesHash, (void *)flatName.get(), PL_DHASH_REMOVE);
|
||||
(void)PL_DHashTableOperate(&mValuesHash, (void *)name, PL_DHASH_REMOVE);
|
||||
|
||||
// inval the number of entries
|
||||
mNumEntries = eNumEntriesUnknown;
|
||||
@@ -257,10 +281,9 @@ nsCommandParams::RemoveValue(const nsAString & name)
|
||||
#endif
|
||||
|
||||
nsCommandParams::HashEntry*
|
||||
nsCommandParams::GetNamedEntry(const nsAString& name)
|
||||
nsCommandParams::GetNamedEntry(const char * name)
|
||||
{
|
||||
nsPromiseFlatString flatName = PromiseFlatString(name);
|
||||
HashEntry *foundEntry = (HashEntry *)PL_DHashTableOperate(&mValuesHash, (void *)flatName.get(), PL_DHASH_LOOKUP);
|
||||
HashEntry *foundEntry = (HashEntry *)PL_DHashTableOperate(&mValuesHash, (void *)name, PL_DHASH_LOOKUP);
|
||||
|
||||
if (PL_DHASH_ENTRY_IS_BUSY(foundEntry))
|
||||
return foundEntry;
|
||||
@@ -281,7 +304,7 @@ nsCommandParams::GetIndexedEntry(PRInt32 index)
|
||||
if (!PL_DHASH_ENTRY_IS_LIVE(entry))
|
||||
continue;
|
||||
|
||||
if (entryCount == index)
|
||||
if ((PRInt32)entryCount == index)
|
||||
return entry;
|
||||
|
||||
entryCount ++;
|
||||
@@ -308,11 +331,10 @@ nsCommandParams::GetNumEntries()
|
||||
}
|
||||
|
||||
nsresult
|
||||
nsCommandParams::GetOrMakeEntry(const nsAString& name, PRUint8 entryType, HashEntry*& outEntry)
|
||||
nsCommandParams::GetOrMakeEntry(const char * name, PRUint8 entryType, HashEntry*& outEntry)
|
||||
{
|
||||
nsPromiseFlatString flatName = PromiseFlatString(name);
|
||||
|
||||
HashEntry *foundEntry = (HashEntry *)PL_DHashTableOperate(&mValuesHash, (void *)flatName.get(), PL_DHASH_LOOKUP);
|
||||
HashEntry *foundEntry = (HashEntry *)PL_DHashTableOperate(&mValuesHash, (void *)name, PL_DHASH_LOOKUP);
|
||||
if (PL_DHASH_ENTRY_IS_BUSY(foundEntry)) // reuse existing entry
|
||||
{
|
||||
foundEntry->Reset(entryType);
|
||||
@@ -321,7 +343,7 @@ nsCommandParams::GetOrMakeEntry(const nsAString& name, PRUint8 entryType, HashEn
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
foundEntry = (HashEntry *)PL_DHashTableOperate(&mValuesHash, (void *)flatName.get(), PL_DHASH_ADD);
|
||||
foundEntry = (HashEntry *)PL_DHashTableOperate(&mValuesHash, (void *)name, PL_DHASH_ADD);
|
||||
if (!foundEntry) return NS_ERROR_OUT_OF_MEMORY;
|
||||
|
||||
// placement new that sucker. Our ctor does not clobber keyHash, which is important.
|
||||
@@ -344,14 +366,14 @@ nsCommandParams::HashGetKey(PLDHashTable *table, PLDHashEntryHdr *entry)
|
||||
PLDHashNumber
|
||||
nsCommandParams::HashKey(PLDHashTable *table, const void *key)
|
||||
{
|
||||
return nsCRT::HashCode((const PRUnichar*)key);
|
||||
return nsCRT::HashCode((const char *)key);
|
||||
}
|
||||
|
||||
PRBool
|
||||
nsCommandParams::HashMatchEntry(PLDHashTable *table,
|
||||
const PLDHashEntryHdr *entry, const void *key)
|
||||
{
|
||||
const PRUnichar* keyString = (const PRUnichar*)key;
|
||||
const char* keyString = (const char*)key;
|
||||
const HashEntry* thisEntry = NS_STATIC_CAST(const HashEntry*, entry);
|
||||
|
||||
return thisEntry->mEntryName.Equals(keyString);
|
||||
@@ -403,13 +425,13 @@ nsCommandParams::First()
|
||||
|
||||
/* AString getNext (); */
|
||||
NS_IMETHODIMP
|
||||
nsCommandParams::GetNext(nsAString & _retval)
|
||||
nsCommandParams::GetNext(char **_retval)
|
||||
{
|
||||
HashEntry* thisEntry = GetIndexedEntry(mCurEntry);
|
||||
if (!thisEntry)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
_retval.Assign(thisEntry->mEntryName);
|
||||
*_retval = nsCRT::strdup(thisEntry->mEntryName.get());
|
||||
mCurEntry++;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
@@ -68,7 +68,7 @@ protected:
|
||||
|
||||
struct HashEntry : public PLDHashEntryHdr
|
||||
{
|
||||
nsString mEntryName;
|
||||
nsCString mEntryName;
|
||||
|
||||
PRUint8 mEntryType;
|
||||
union {
|
||||
@@ -80,11 +80,13 @@ protected:
|
||||
|
||||
// put these outside the union to avoid clobbering other fields
|
||||
nsString* mString;
|
||||
nsCString* mCString;
|
||||
|
||||
nsCOMPtr<nsISupports> mISupports;
|
||||
|
||||
HashEntry(PRUint8 inType, const nsAString& inEntryName)
|
||||
: mEntryName(inEntryName)
|
||||
, mEntryType(inType)
|
||||
HashEntry(PRUint8 inType, const char * inEntryName)
|
||||
: mEntryType(inType)
|
||||
, mEntryName(inEntryName)
|
||||
, mString(nsnull)
|
||||
{
|
||||
mData.mDouble = 0.0;
|
||||
@@ -104,6 +106,10 @@ protected:
|
||||
NS_ASSERTION(inRHS.mString, "Source entry has no string");
|
||||
mString = new nsString(*inRHS.mString);
|
||||
break;
|
||||
case eStringType:
|
||||
NS_ASSERTION(inRHS.mCString, "Source entry has no string");
|
||||
mCString = new nsCString(*inRHS.mCString);
|
||||
break;
|
||||
case eISupportsType:
|
||||
mISupports = inRHS.mISupports.get(); // additional addref
|
||||
break;
|
||||
@@ -116,6 +122,8 @@ protected:
|
||||
{
|
||||
if (mEntryType == eWStringType)
|
||||
delete mString;
|
||||
else if (mEntryType == eStringType)
|
||||
delete mCString;
|
||||
}
|
||||
|
||||
void Reset(PRUint8 inNewType)
|
||||
@@ -128,6 +136,7 @@ protected:
|
||||
case eDoubleType: mData.mDouble = 0.0; break;
|
||||
case eWStringType: delete mString; mString = nsnull; break;
|
||||
case eISupportsType: mISupports = nsnull; break; // clear the nsCOMPtr
|
||||
case eStringType: delete mCString; mCString = nsnull; break;
|
||||
default:
|
||||
NS_ASSERTION(0, "Unknown type");
|
||||
}
|
||||
@@ -138,11 +147,11 @@ protected:
|
||||
};
|
||||
|
||||
|
||||
HashEntry* GetNamedEntry(const nsAString& name);
|
||||
HashEntry* GetNamedEntry(const char * name);
|
||||
HashEntry* GetIndexedEntry(PRInt32 index);
|
||||
PRUint32 GetNumEntries();
|
||||
|
||||
nsresult GetOrMakeEntry(const nsAString& name, PRUint8 entryType, HashEntry*& outEntry);
|
||||
nsresult GetOrMakeEntry(const char * name, PRUint8 entryType, HashEntry*& outEntry);
|
||||
|
||||
protected:
|
||||
|
||||
|
||||
@@ -64,9 +64,9 @@ NS_IMPL_ISUPPORTS2(nsControllerCommandManager, nsIControllerCommandManager, nsIS
|
||||
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsControllerCommandManager::RegisterCommand(const nsAString & aCommandName, nsIControllerCommand *aCommand)
|
||||
nsControllerCommandManager::RegisterCommand(const char * aCommandName, nsIControllerCommand *aCommand)
|
||||
{
|
||||
nsStringKey commandKey(aCommandName);
|
||||
nsCStringKey commandKey(aCommandName);
|
||||
|
||||
if (mCommandsTable.Put (&commandKey, aCommand))
|
||||
{
|
||||
@@ -79,9 +79,9 @@ nsControllerCommandManager::RegisterCommand(const nsAString & aCommandName, nsIC
|
||||
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsControllerCommandManager::UnregisterCommand(const nsAString & aCommandName, nsIControllerCommand *aCommand)
|
||||
nsControllerCommandManager::UnregisterCommand(const char * aCommandName, nsIControllerCommand *aCommand)
|
||||
{
|
||||
nsStringKey commandKey(aCommandName);
|
||||
nsCStringKey commandKey(aCommandName);
|
||||
|
||||
PRBool wasRemoved = mCommandsTable.Remove (&commandKey);
|
||||
return wasRemoved ? NS_OK : NS_ERROR_FAILURE;
|
||||
@@ -89,13 +89,13 @@ nsControllerCommandManager::UnregisterCommand(const nsAString & aCommandName, ns
|
||||
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsControllerCommandManager::FindCommandHandler(const nsAString & aCommandName, nsIControllerCommand **outCommand)
|
||||
nsControllerCommandManager::FindCommandHandler(const char * aCommandName, nsIControllerCommand **outCommand)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(outCommand);
|
||||
|
||||
*outCommand = NULL;
|
||||
|
||||
nsStringKey commandKey(aCommandName);
|
||||
nsCStringKey commandKey(aCommandName);
|
||||
nsISupports* foundCommand = mCommandsTable.Get(&commandKey); // this does the addref
|
||||
if (!foundCommand) return NS_ERROR_FAILURE;
|
||||
|
||||
@@ -107,7 +107,7 @@ nsControllerCommandManager::FindCommandHandler(const nsAString & aCommandName, n
|
||||
|
||||
/* boolean isCommandEnabled (in wstring command); */
|
||||
NS_IMETHODIMP
|
||||
nsControllerCommandManager::IsCommandEnabled(const nsAString & aCommandName, nsISupports *aCommandRefCon, PRBool *aResult)
|
||||
nsControllerCommandManager::IsCommandEnabled(const char * aCommandName, nsISupports *aCommandRefCon, PRBool *aResult)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(aResult);
|
||||
|
||||
@@ -129,7 +129,7 @@ nsControllerCommandManager::IsCommandEnabled(const nsAString & aCommandName, nsI
|
||||
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsControllerCommandManager::UpdateCommandState(const nsAString & aCommandName, nsISupports *aCommandRefCon)
|
||||
nsControllerCommandManager::UpdateCommandState(const char * aCommandName, nsISupports *aCommandRefCon)
|
||||
{
|
||||
// find the command
|
||||
nsCOMPtr<nsIControllerCommand> commandHandler;
|
||||
@@ -155,7 +155,7 @@ nsControllerCommandManager::UpdateCommandState(const nsAString & aCommandName, n
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsControllerCommandManager::SupportsCommand(const nsAString & aCommandName, nsISupports *aCommandRefCon, PRBool *aResult)
|
||||
nsControllerCommandManager::SupportsCommand(const char * aCommandName, nsISupports *aCommandRefCon, PRBool *aResult)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(aResult);
|
||||
|
||||
@@ -173,11 +173,11 @@ nsControllerCommandManager::SupportsCommand(const nsAString & aCommandName, nsIS
|
||||
|
||||
/* void doCommand (in wstring command); */
|
||||
NS_IMETHODIMP
|
||||
nsControllerCommandManager::DoCommand(const nsAString & aCommandName, nsISupports *aCommandRefCon)
|
||||
nsControllerCommandManager::DoCommand(const char * aCommandName, nsISupports *aCommandRefCon)
|
||||
{
|
||||
// find the command
|
||||
nsCOMPtr<nsIControllerCommand> commandHandler;
|
||||
FindCommandHandler(aCommandName, getter_AddRefs(commandHandler));
|
||||
FindCommandHandler(aCommandName, getter_AddRefs(commandHandler));
|
||||
if (!commandHandler)
|
||||
{
|
||||
#if DEBUG
|
||||
@@ -189,51 +189,39 @@ nsControllerCommandManager::DoCommand(const nsAString & aCommandName, nsISupport
|
||||
return commandHandler->DoCommand(aCommandName, aCommandRefCon);
|
||||
}
|
||||
|
||||
#define COMMAND_NAME NS_ConvertASCIItoUCS2("cmd_name")
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsControllerCommandManager::DoCommandParams(nsICommandParams *aParams, nsISupports *aCommandRefCon)
|
||||
nsControllerCommandManager::DoCommandParams(const char *aCommandName, nsICommandParams *aParams, nsISupports *aCommandRefCon)
|
||||
{
|
||||
// find the command
|
||||
nsCOMPtr<nsIControllerCommand> commandHandler;
|
||||
nsAutoString tValue;
|
||||
nsresult rv;
|
||||
if (NS_SUCCEEDED(rv = aParams->GetStringValue(COMMAND_NAME,tValue)))
|
||||
rv = FindCommandHandler(aCommandName, getter_AddRefs(commandHandler));
|
||||
if (!commandHandler)
|
||||
{
|
||||
FindCommandHandler(tValue, getter_AddRefs(commandHandler));
|
||||
if (!commandHandler)
|
||||
{
|
||||
#if DEBUG
|
||||
NS_WARNING("Controller command manager asked to do a command that it does not handle -- ");
|
||||
#endif
|
||||
return NS_OK; // we don't handle this command
|
||||
}
|
||||
return commandHandler->DoCommandParams(aParams, aCommandRefCon);
|
||||
}
|
||||
return rv;
|
||||
#if DEBUG
|
||||
NS_WARNING("Controller command manager asked to do a command that it does not handle -- ");
|
||||
#endif
|
||||
return NS_OK; // we don't handle this command
|
||||
}
|
||||
return commandHandler->DoCommandParams(aCommandName, aParams, aCommandRefCon);
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsControllerCommandManager::GetCommandState(nsICommandParams *aParams, nsISupports *aCommandRefCon)
|
||||
nsControllerCommandManager::GetCommandState(const char *aCommandName, nsICommandParams *aParams, nsISupports *aCommandRefCon)
|
||||
{
|
||||
// find the command
|
||||
nsCOMPtr<nsIControllerCommand> commandHandler;
|
||||
nsAutoString tValue;
|
||||
nsresult rv;
|
||||
if (NS_SUCCEEDED(rv = aParams->GetStringValue(COMMAND_NAME,tValue)))
|
||||
rv = FindCommandHandler(aCommandName, getter_AddRefs(commandHandler));
|
||||
if (!commandHandler)
|
||||
{
|
||||
FindCommandHandler(tValue, getter_AddRefs(commandHandler));
|
||||
if (!commandHandler)
|
||||
{
|
||||
#if DEBUG
|
||||
NS_WARNING("Controller command manager asked to do a command that it does not handle -- ");
|
||||
#endif
|
||||
return NS_OK; // we don't handle this command
|
||||
}
|
||||
return commandHandler->GetCommandState(aParams, aCommandRefCon);
|
||||
}
|
||||
return rv;
|
||||
#if DEBUG
|
||||
NS_WARNING("Controller command manager asked to do a command that it does not handle -- ");
|
||||
#endif
|
||||
return NS_OK; // we don't handle this command
|
||||
}
|
||||
return commandHandler->GetCommandState(aCommandName, aParams, aCommandRefCon);
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user