// @cmember Retrieves the value of the passed attribute. LPCSTR CCFXRequestImpl::GetAttribute( LPCSTR lpszName ) { if ( ( lpszName == NULL ) || !AttributeExists( lpszName ) ) return NULL; // String _request.getAttribute( String name ) jmethodID getAttribute = _env->GetMethodID( _env->GetObjectClass( _request ), "getAttribute", "(Ljava/lang/String;)Ljava/lang/String;" ); if ( getAttribute == NULL ) throw new CCFXExceptionImpl( "Failed to get _request.getAttribute() method", "CCFXRequestImpl::GetAttribute" ); jstring attrValue = (jstring)_env->CallObjectMethod( _request, getAttribute, _env->NewStringUTF( lpszName ) ); const char *attrChars = _env->GetStringUTFChars( attrValue, NULL ); return attrChars; }
////NSIFRAME NS_IMETHODIMP nsTextControlFrame::AttributeChanged(PRInt32 aNameSpaceID, nsIAtom* aAttribute, PRInt32 aModType) { nsCOMPtr<nsITextControlElement> txtCtrl = do_QueryInterface(GetContent()); NS_ASSERTION(txtCtrl, "Content not a text control element"); nsISelectionController* selCon = txtCtrl->GetSelectionController(); const PRBool needEditor = nsGkAtoms::maxlength == aAttribute || nsGkAtoms::readonly == aAttribute || nsGkAtoms::disabled == aAttribute || nsGkAtoms::spellcheck == aAttribute; nsCOMPtr<nsIEditor> editor; if (needEditor) { GetEditor(getter_AddRefs(editor)); } if ((needEditor && !editor) || !selCon) return nsBoxFrame::AttributeChanged(aNameSpaceID, aAttribute, aModType);; nsresult rv = NS_OK; if (nsGkAtoms::maxlength == aAttribute) { PRInt32 maxLength; PRBool maxDefined = GetMaxLength(&maxLength); nsCOMPtr<nsIPlaintextEditor> textEditor = do_QueryInterface(editor); if (textEditor) { if (maxDefined) { // set the maxLength attribute textEditor->SetMaxTextLength(maxLength); // if maxLength>docLength, we need to truncate the doc content } else { // unset the maxLength attribute textEditor->SetMaxTextLength(-1); } } rv = NS_OK; // don't propagate the error } else if (nsGkAtoms::readonly == aAttribute) { PRUint32 flags; editor->GetFlags(&flags); if (AttributeExists(nsGkAtoms::readonly)) { // set readonly flags |= nsIPlaintextEditor::eEditorReadonlyMask; if (nsContentUtils::IsFocusedContent(mContent)) selCon->SetCaretEnabled(PR_FALSE); } else { // unset readonly flags &= ~(nsIPlaintextEditor::eEditorReadonlyMask); if (!(flags & nsIPlaintextEditor::eEditorDisabledMask) && nsContentUtils::IsFocusedContent(mContent)) selCon->SetCaretEnabled(PR_TRUE); } editor->SetFlags(flags); } else if (nsGkAtoms::disabled == aAttribute) { PRUint32 flags; editor->GetFlags(&flags); if (AttributeExists(nsGkAtoms::disabled)) { // set disabled flags |= nsIPlaintextEditor::eEditorDisabledMask; selCon->SetDisplaySelection(nsISelectionController::SELECTION_OFF); if (nsContentUtils::IsFocusedContent(mContent)) selCon->SetCaretEnabled(PR_FALSE); } else { // unset disabled flags &= ~(nsIPlaintextEditor::eEditorDisabledMask); selCon->SetDisplaySelection(nsISelectionController::SELECTION_HIDDEN); if (nsContentUtils::IsFocusedContent(mContent)) { selCon->SetCaretEnabled(PR_TRUE); } } editor->SetFlags(flags); } else if (!mUseEditor && nsGkAtoms::value == aAttribute) { UpdateValueDisplay(PR_TRUE); } // Allow the base class to handle common attributes supported // by all form elements... else { rv = nsBoxFrame::AttributeChanged(aNameSpaceID, aAttribute, aModType); } return rv; }