/** * Loads the GraphEditorModule and constructs a GraphEditor as a child of this widget. * * @param InArgs Declaration params from which to construct the widget. */ void SGraphEditor::Construct( const FArguments& InArgs ) { EdGraphObj = InArgs._GraphToEdit; OnGraphModuleReloadedCallback = InArgs._OnGraphModuleReloaded; // Register this widget with the module so that we can gracefully handle the module being unloaded. // See OnModuleUnloading() RegisterGraphEditor( SharedThis(this) ); // Register a graph modified handler if (EdGraphObj != NULL) { EdGraphObj->AddOnGraphChangedHandler( FOnGraphChanged::FDelegate::CreateSP( this, &SGraphEditor::OnGraphChanged ) ); } // Make the actual GraphEditor instance ConstructImplementation(InArgs); }
PRBool nsXBLContentSink::OnOpenContainer(const PRUnichar **aAtts, PRUint32 aAttsCount, PRInt32 aNameSpaceID, nsIAtom* aTagName, PRUint32 aLineNumber) { if (mState == eXBL_Error) { return PR_TRUE; } if (aNameSpaceID != kNameSpaceID_XBL) { // Construct non-XBL nodes return PR_TRUE; } PRBool ret = PR_TRUE; if (aTagName == nsGkAtoms::bindings) { ENSURE_XBL_STATE(mState == eXBL_InDocument); NS_NewXBLDocumentInfo(mDocument, &mDocInfo); if (!mDocInfo) { mState = eXBL_Error; return PR_TRUE; } mDocument->BindingManager()->PutXBLDocumentInfo(mDocInfo); nsIURI *uri = mDocument->GetDocumentURI(); PRBool isChrome = PR_FALSE; PRBool isRes = PR_FALSE; uri->SchemeIs("chrome", &isChrome); uri->SchemeIs("resource", &isRes); mIsChromeOrResource = isChrome || isRes; nsIXBLDocumentInfo* info = mDocInfo; NS_RELEASE(info); // We keep a weak ref. We've created a cycle between doc/binding manager/doc info. mState = eXBL_InBindings; } else if (aTagName == nsGkAtoms::binding) { ENSURE_XBL_STATE(mState == eXBL_InBindings); mState = eXBL_InBinding; } else if (aTagName == nsGkAtoms::handlers) { ENSURE_XBL_STATE(mState == eXBL_InBinding && mBinding); mState = eXBL_InHandlers; ret = PR_FALSE; } else if (aTagName == nsGkAtoms::handler) { ENSURE_XBL_STATE(mState == eXBL_InHandlers); mSecondaryState = eXBL_InHandler; ConstructHandler(aAtts, aLineNumber); ret = PR_FALSE; } else if (aTagName == nsGkAtoms::resources) { ENSURE_XBL_STATE(mState == eXBL_InBinding && mBinding); mState = eXBL_InResources; // Note that this mState will cause us to return false, so no need // to set ret to false. } else if (aTagName == nsGkAtoms::stylesheet || aTagName == nsGkAtoms::image) { ENSURE_XBL_STATE(mState == eXBL_InResources); NS_ASSERTION(mBinding, "Must have binding here"); ConstructResource(aAtts, aTagName); } else if (aTagName == nsGkAtoms::implementation) { ENSURE_XBL_STATE(mState == eXBL_InBinding && mBinding); mState = eXBL_InImplementation; ConstructImplementation(aAtts); // Note that this mState will cause us to return false, so no need // to set ret to false. } else if (aTagName == nsGkAtoms::constructor) { ENSURE_XBL_STATE(mState == eXBL_InImplementation && mSecondaryState == eXBL_None); NS_ASSERTION(mBinding, "Must have binding here"); mSecondaryState = eXBL_InConstructor; nsXBLProtoImplAnonymousMethod* newMethod = new nsXBLProtoImplAnonymousMethod(); if (newMethod) { newMethod->SetLineNumber(aLineNumber); mBinding->SetConstructor(newMethod); AddMember(newMethod); } } else if (aTagName == nsGkAtoms::destructor) { ENSURE_XBL_STATE(mState == eXBL_InImplementation && mSecondaryState == eXBL_None); NS_ASSERTION(mBinding, "Must have binding here"); mSecondaryState = eXBL_InDestructor; nsXBLProtoImplAnonymousMethod* newMethod = new nsXBLProtoImplAnonymousMethod(); if (newMethod) { newMethod->SetLineNumber(aLineNumber); mBinding->SetDestructor(newMethod); AddMember(newMethod); } } else if (aTagName == nsGkAtoms::field) { ENSURE_XBL_STATE(mState == eXBL_InImplementation && mSecondaryState == eXBL_None); NS_ASSERTION(mBinding, "Must have binding here"); mSecondaryState = eXBL_InField; ConstructField(aAtts, aLineNumber); } else if (aTagName == nsGkAtoms::property) { ENSURE_XBL_STATE(mState == eXBL_InImplementation && mSecondaryState == eXBL_None); NS_ASSERTION(mBinding, "Must have binding here"); mSecondaryState = eXBL_InProperty; ConstructProperty(aAtts); } else if (aTagName == nsGkAtoms::getter) { ENSURE_XBL_STATE(mSecondaryState == eXBL_InProperty && mProperty); NS_ASSERTION(mState == eXBL_InImplementation, "Unexpected state"); mProperty->SetGetterLineNumber(aLineNumber); mSecondaryState = eXBL_InGetter; } else if (aTagName == nsGkAtoms::setter) { ENSURE_XBL_STATE(mSecondaryState == eXBL_InProperty && mProperty); NS_ASSERTION(mState == eXBL_InImplementation, "Unexpected state"); mProperty->SetSetterLineNumber(aLineNumber); mSecondaryState = eXBL_InSetter; } else if (aTagName == nsGkAtoms::method) { ENSURE_XBL_STATE(mState == eXBL_InImplementation && mSecondaryState == eXBL_None); NS_ASSERTION(mBinding, "Must have binding here"); mSecondaryState = eXBL_InMethod; ConstructMethod(aAtts); } else if (aTagName == nsGkAtoms::parameter) { ENSURE_XBL_STATE(mSecondaryState == eXBL_InMethod && mMethod); NS_ASSERTION(mState == eXBL_InImplementation, "Unexpected state"); ConstructParameter(aAtts); } else if (aTagName == nsGkAtoms::body) { ENSURE_XBL_STATE(mSecondaryState == eXBL_InMethod && mMethod); NS_ASSERTION(mState == eXBL_InImplementation, "Unexpected state"); // stash away the line number mMethod->SetLineNumber(aLineNumber); mSecondaryState = eXBL_InBody; } return ret && mState != eXBL_InResources && mState != eXBL_InImplementation; }