private void ContextSelectionChanged(object sender, EventArgs e) { // Display the properties of the most recently selected event in the currently active document. if ((m_documentRegistry != null) && (m_documentRegistry.ActiveDocument != null)) { WinGuiWpfDataContext dataContext = m_documentRegistry.ActiveDocument.As <WinGuiWpfDataContext>(); m_eventViewModel.Event = dataContext.Selection.LastSelected.As <WinGuiCommon.Event>(); } }
/// <summary> /// Notifies the client that its Control has been activated. Activation occurs when /// the Control gets focus, or a parent "host" Control gets focus.</summary> /// <param name="control">Client Control that was activated</param> /// <remarks>This method is only called by IControlHostService if the Control was previously /// registered for this IControlHostClient.</remarks> void IControlHostClient.Activate(object control) { WinGuiWpfDataDocument document = null; if (control is System.Windows.Forms.Control) { document = ((System.Windows.Forms.Control)control).Tag as WinGuiWpfDataDocument; } if (document != null) { m_documentRegistry.ActiveDocument = document; WinGuiWpfDataContext context = document.As <WinGuiWpfDataContext>(); m_contextRegistry.ActiveContext = context; } }
/// <summary> /// Closes the document and removes any views of it from the UI</summary> /// <param name="document">Document to close</param> public void Close(IDocument document) { WinGuiWpfDataContext context = Adapters.As <WinGuiWpfDataContext>(document); m_controlHostService.UnregisterContent(context.ListView); context.ControlInfo = null; context.SelectionChanged -= ContextSelectionChanged; // close all active EditingContexts in the document foreach (DomNode node in context.DomNode.Subtree) { foreach (EditingContext editingContext in node.AsAll <EditingContext>()) { m_contextRegistry.RemoveContext(editingContext); } } // close the document m_documentRegistry.Remove(document); }
/// <summary> /// Makes the document visible to the user</summary> /// <param name="document">Document to show</param> public void Show(IDocument document) { WinGuiWpfDataContext context = Adapters.As <WinGuiWpfDataContext>(document); m_controlHostService.Show(context.ListView); }
/// <summary> /// Opens or creates a document at the given URI</summary> /// <param name="uri">Document URI</param> /// <returns>Document, or null if the document couldn't be opened or created</returns> public IDocument Open(Uri uri) { DomNode node = null; string filePath = uri.LocalPath; string fileName = Path.GetFileName(filePath); if (File.Exists(filePath)) { // read existing document using standard XML reader using (FileStream stream = new FileStream(filePath, FileMode.Open, FileAccess.Read)) { DomXmlReader reader = new DomXmlReader(m_schemaLoader); node = reader.Read(stream, uri); } } else { // create new document by creating a Dom node of the root type defined by the schema node = new DomNode(Schema.winGuiCommonDataType.Type, Schema.winGuiCommonDataRootElement); } WinGuiWpfDataDocument document = null; if (node != null) { // Initialize Dom extensions now that the data is complete node.InitializeExtensions(); WinGuiWpfDataContext context = node.As <WinGuiWpfDataContext>(); context.SelectionChanged += ContextSelectionChanged; ControlInfo controlInfo = new ControlInfo(Path.Combine(filePath, fileName), StandardControlGroup.Center, new Sce.Atf.Wpf.Docking.DockContent(null, null), this); context.ControlInfo = controlInfo; // set document URI document = node.As <WinGuiWpfDataDocument>(); document.Uri = uri; context.ListView.Tag = document; // If the document is empty, add some data so there's something to look at if (!context.Items.Any(typeof(object))) { DomNode domNode = new DomNode(Schema.eventType.Type); domNode.SetAttribute(Schema.eventType.nameAttribute, "First Event"); domNode.SetAttribute(Schema.eventType.durationAttribute, 100); var dataObject = new System.Windows.DataObject(new object[] { domNode }); context.Insert(dataObject); domNode = new DomNode(Schema.eventType.Type); domNode.SetAttribute(Schema.eventType.nameAttribute, "Second Event"); domNode.SetAttribute(Schema.eventType.durationAttribute, 200); var dataObject2 = new System.Windows.DataObject(new object[] { domNode }); context.Insert(dataObject2); } // show the ListView control ControlInfo registeredControlInfo = (ControlInfo)m_controlHostService.RegisterControl(context.ListView, fileName, "WPF Sample file", controlInfo.Group, fileName, this); if (registeredControlInfo.DockContent != null) { registeredControlInfo.DockContent.Closing += DockContent_Closing; } } return(document); }