NS_IMETHODIMP nsRemoveListCommand::IsCommandEnabled(const char * aCommandName, nsISupports *refCon, bool *outCmdEnabled) { *outCmdEnabled = false; nsCOMPtr<nsIEditor> editor = do_QueryInterface(refCon); NS_ENSURE_TRUE(editor, NS_OK); bool isEditable = false; nsresult rv = editor->GetIsSelectionEditable(&isEditable); NS_ENSURE_SUCCESS(rv, rv); if (!isEditable) { return NS_OK; } // It is enabled if we are in any list type nsCOMPtr<nsIHTMLEditor> htmlEditor = do_QueryInterface(refCon); NS_ENSURE_TRUE(htmlEditor, NS_ERROR_NO_INTERFACE); bool bMixed; nsAutoString localName; rv = GetListState(htmlEditor, &bMixed, localName); NS_ENSURE_SUCCESS(rv, rv); *outCmdEnabled = bMixed || !localName.IsEmpty(); return NS_OK; }
NS_IMETHODIMP nsRemoveListCommand::IsCommandEnabled(const char * aCommandName, nsISupports *refCon, bool *outCmdEnabled) { nsCOMPtr<nsIEditor> editor = do_QueryInterface(refCon); if (editor) { bool isEditable = false; nsresult rv = editor->GetIsSelectionEditable(&isEditable); NS_ENSURE_SUCCESS(rv, rv); if (isEditable) { // It is enabled if we are in any list type bool bMixed; PRUnichar *tagStr; nsresult rv = GetListState(editor, &bMixed, &tagStr); NS_ENSURE_SUCCESS(rv, rv); *outCmdEnabled = bMixed ? true : (tagStr && *tagStr); if (tagStr) NS_Free(tagStr); return NS_OK; } } *outCmdEnabled = false; return NS_OK; }
nsresult nsListItemCommand::ToggleState(nsIEditor *aEditor, const char* aTagName) { NS_ASSERTION(aEditor, "Need editor here"); nsCOMPtr<nsIHTMLEditor> htmlEditor = do_QueryInterface(aEditor); NS_ENSURE_TRUE(htmlEditor, NS_ERROR_NOT_INITIALIZED); bool inList; // Need to use mTagName???? nsresult rv; nsCOMPtr<nsICommandParams> params = do_CreateInstance(NS_COMMAND_PARAMS_CONTRACTID,&rv); if (NS_FAILED(rv) || !params) return rv; rv = GetCurrentState(aEditor, mTagName, params); rv = params->GetBooleanValue(STATE_ALL,&inList); NS_ENSURE_SUCCESS(rv, rv); NS_ENSURE_SUCCESS(rv, rv); if (inList) { // To remove a list, first get what kind of list we're in bool bMixed; PRUnichar *tagStr; rv = GetListState(aEditor,&bMixed, &tagStr); NS_ENSURE_SUCCESS(rv, rv); if (tagStr) { if (!bMixed) { rv = htmlEditor->RemoveList(nsDependentString(tagStr)); } NS_Free(tagStr); } } else { nsAutoString itemType; itemType.AssignWithConversion(mTagName); // Set to the requested paragraph type //XXX Note: This actually doesn't work for "LI", // but we currently don't use this for non DL lists anyway. // Problem: won't this replace any current block paragraph style? rv = htmlEditor->SetParagraphFormat(itemType); } return rv; }
nsresult nsListCommand::GetCurrentState(nsIEditor* aEditor, nsICommandParams* aParams) { NS_ASSERTION(aEditor, "Need editor here"); nsCOMPtr<nsIHTMLEditor> htmlEditor = do_QueryInterface(aEditor); NS_ENSURE_TRUE(htmlEditor, NS_ERROR_NO_INTERFACE); bool bMixed; nsAutoString localName; nsresult rv = GetListState(htmlEditor, &bMixed, localName); NS_ENSURE_SUCCESS(rv, rv); bool inList = mTagName->Equals(localName); aParams->SetBooleanValue(STATE_ALL, !bMixed && inList); aParams->SetBooleanValue(STATE_MIXED, bMixed); aParams->SetBooleanValue(STATE_ENABLED, true); return NS_OK; }
nsresult nsListCommand::GetCurrentState(nsIEditor *aEditor, const char* aTagName, nsICommandParams *aParams) { NS_ASSERTION(aEditor, "Need editor here"); bool bMixed; PRUnichar *tagStr; nsresult rv = GetListState(aEditor,&bMixed, &tagStr); NS_ENSURE_SUCCESS(rv, rv); // Need to use mTagName???? bool inList = (0 == nsCRT::strcmp(tagStr, NS_ConvertASCIItoUTF16(mTagName).get())); aParams->SetBooleanValue(STATE_ALL, !bMixed && inList); aParams->SetBooleanValue(STATE_MIXED, bMixed); aParams->SetBooleanValue(STATE_ENABLED, true); if (tagStr) NS_Free(tagStr); return NS_OK; }