public override int OnElementValueChanged(uint elementid, object varValueOld, object varValueNew) { int hr = VSConstants.S_OK; if (elementid == VSConstants.DocumentFrame) { IVsWindowFrame pWindowFrame = varValueOld as IVsWindowFrame; if (pWindowFrame != null) { object document; // Get the name of the document associated with the old window frame. // hr = pWindowFrame.GetProperty((int)__VSFPROPID.VSFPROPID_pszMkDocument, out document); if (ErrorHandler.Succeeded(hr)) { uint itemid; IVsHierarchy hier = projMgr; hr = hier.ParseCanonicalName((string)document, out itemid); NemerleFileNode node = projMgr.NodeFromItemId(itemid) as NemerleFileNode; if (null != node) { node.RunGenerator(); } } } } return(hr); }
/// <summary> /// Create a file node based on an msbuild item. /// </summary> /// <param name="item">The msbuild item to be analyzed</param> /// <returns>NemerleFileNode or FileNode</returns> public override FileNode CreateFileNode(ProjectElement item) { ErrorHelper.ThrowIsNull(item, "item"); NemerleFileNode newNode = new NemerleFileNode(this, item, item.IsVirtual); string include = item.GetMetadata(ProjectFileConstants.Include); var provider = newNode.OleServiceProvider; provider.AddService(typeof(EnvDTE.Project), ProjectMgr.GetAutomationObject(), false); provider.AddService(typeof(EnvDTE.ProjectItem), newNode.ServiceCreator, false); provider.AddService(typeof(VSLangProj.VSProject), this.VSProject, false); if (!string.IsNullOrEmpty(include) && Path.GetExtension(include).Equals(".xaml", StringComparison.OrdinalIgnoreCase)) { //Create a DesignerContext for the XAML designer for this file newNode.OleServiceProvider.AddService(typeof(DesignerContext), newNode.ServiceCreator, false); } if (newNode.IsFormSubType) { newNode.OleServiceProvider.AddService(typeof(DesignerContext), newNode.ServiceCreator, false); } if (item.ItemName == "Compile") // IsCodeFile(include) && provider.AddService(typeof(SVSMDCodeDomProvider), new NemerleVSMDProvider(newNode), false); return newNode; }
// AKhropov: In fact these 2 constructors only to restrict possible file nodes, // could be simply NemerleFileCodeDomProvider(FileNode fileNode) internal NemerleFileNodeCodeDomProvider(NemerleFileNode fileNode) { _fileNode = fileNode; Init(); }