/// <summary>
        /// Constructor.
        /// </summary>
        /// <param name="sourceViewModel">View model that triggers the event.</param>
        /// <param name="viewModelToOpen">View model that needs to be opened.</param>
        public OpenViewModelEventArgs(BaseDockingViewModel sourceViewModel, BaseDockingViewModel viewModelToOpen)
            : base(sourceViewModel)
        {
            DockingPaneStyle       = DockingPaneStyle.Docked;
            DockingPaneAnchorStyle = DockingPaneAnchorStyle.None;

            this.ViewModelToOpen = viewModelToOpen;
        }
Beispiel #2
0
        /// <summary>
        /// Constructor.
        /// </summary>
        /// <param name="sourceViewModel">View model that triggers the event.</param>
        /// <param name="viewName">View model name.</param>
        public ShowViewModelRequestEventArgs(BaseDockingViewModel sourceViewModel, string viewName)
            : base(sourceViewModel)
        {
            DockingPaneStyle       = DockingPaneStyle.Docked;
            DockingPaneAnchorStyle = DockingPaneAnchorStyle.None;

            this.ViewName = viewName;
        }
Beispiel #3
0
        /// <summary>
        /// Tries to close a specified window..
        /// </summary>
        /// <param name="view"></param>
        /// <param name="bRemove"></param>
        public void CloseWindow(IDockableViewModel view, bool bRemove)
        {
            string accessKey = this.SelectedShellViewModel.FullFileName;

            if (this.IsTransientViewModel(view.GetType()))
            {
                accessKey = TransientPanesKey;
            }

            if (!viewLookup.ContainsKey(accessKey))
            {
                return;
            }

            if (viewLookup[accessKey].ContainsKey(view.DockingPaneName))
            {
                ViewLookUp v = viewLookup[view.DockingPaneName][accessKey];
                if (v.Pane != null)
                {
                    (v.Pane.Frame as IVsWindowFrame).CloseFrame((uint)__FRAMECLOSE.FRAMECLOSE_NoSave);
                }
                else
                {
                    view.IsDockingPaneVisible = false;

                    if (this.SelectedShellViewModel.VisibleDocumentPanes.Contains(view))
                    {
                        this.SelectedShellViewModel.HiddenDocumentPanes.Add(this.SelectedShellViewModel.SelectedDocumentPane);
                        this.SelectedShellViewModel.VisibleDocumentPanes.Remove(this.SelectedShellViewModel.SelectedDocumentPane);
                    }

                    if (this.SelectedShellViewModel.VisibleDocumentPanes.Count == 0)
                    {
                        this.SelectedShellViewModel.SelectedDocumentPane = null;
                    }
                }

                // TODO ?
                if (bRemove)
                {
                    // remove pane from lookup
                    //this.viewLookup.Remove(view.DockingPaneName);
                }
            }

            if (this.IsTransientViewModel(view.GetType()))
            {
                // update all IsDockingPaneVisible
                foreach (ShellMainViewModel v in this.packageController.AvailableShellVMs.Keys)
                {
                    BaseDockingViewModel foundVm = v.FindViewModel(view.GetType());
                    foundVm.IsDockingPaneVisible = false;
                }
            }
        }
Beispiel #4
0
 private void SetViewModel(ModelToolWindowPane pane, BaseDockingViewModel vm)
 {
     if (vm != null)
     {
         if (!vm.IsDisposed)
         {
             pane.Content.DataContext = vm;
             return;
         }
     }
     pane.Content.DataContext = null;
 }
Beispiel #5
0
 /// <summary>
 /// Constructor.
 /// </summary>
 /// <param name="sourceViewModel">View model that triggers the event.</param>
 public ShowViewModelRequestEventArgs(BaseDockingViewModel sourceViewModel)
     : base(sourceViewModel)
 {
     DockingPaneStyle       = DockingPaneStyle.Docked;
     DockingPaneAnchorStyle = DockingPaneAnchorStyle.None;
 }
Beispiel #6
0
        /// <summary>
        /// Shows a docking window for a given view.
        /// If is has been shown before, restore its position. Otherwise dock it to the right side.
        /// </summary>
        /// <param name="view">View to dock.</param>
        /// <param name="dockingStyle">Docking style.</param>
        /// <param name="dockingAnchorStyle">Docking anchor style. Only usefull for DockingPaneStyle.Docked.</param>
        /// <param name="dockedInDocumentPane">True if this view should be shown in the document pane window. False otherwise.</param>
        /// <param name="fullFileName">File name.</param>
        public virtual void ShowWindow(IDockableViewModel view, DockingPaneStyle dockingStyle, DockingPaneAnchorStyle dockingAnchorStyle, bool dockedInDocumentPane, string fullFileName)
        {
            if (!view.IsInitialized)
            {
                view.InitializeVM();
            }

            string accessKey = fullFileName;

            if (this.IsTransientViewModel(view.GetType()))
            {
                accessKey = TransientPanesKey;
                if (viewLookup.ContainsKey(TransientPanesKey))
                {
                    if (viewLookup[TransientPanesKey].ContainsKey(view.DockingPaneName))
                    {
                        ModelToolWindowPane p = viewLookup[TransientPanesKey][view.DockingPaneName].Pane;
                        if (p != null)
                        {
                            if (((IVsWindowFrame)p.Frame).IsVisible() != VSConstants.S_OK)
                            {
                                return;
                            }
                        }
                    }
                }
            }
            if (!viewLookup.ContainsKey(accessKey))
            {
                viewLookup.Add(accessKey, new Dictionary <string, ViewLookUp>());
            }

            if (!viewLookup[accessKey].ContainsKey(view.DockingPaneName))
            {
                if (!dockedInDocumentPane)
                {
                    int key;
                    if (!this.viewTypeNameLookup.ContainsKey(view.DockingPaneType.FullName))
                    {
                        key = 0;
                    }
                    else
                    {
                        key = this.viewTypeNameLookup[view.DockingPaneType.FullName].Count;
                    }

                    ModelToolWindowPane window = this.package.FindToolWindow(this.package.GetToolWindowType(view.DockingPaneType), key, true) as ModelToolWindowPane;
                    if ((window == null) || (window.Frame == null))
                    {
                        throw new NotSupportedException("Can not show window!");
                    }
                    window.Content.DataContext = view;
                    window.Caption             = view.DockingPaneTitle;

                    // subscribe to events
                    window.PaneClosed += new EventHandler(Window_PaneClosed);

                    // get window frame
                    IVsWindowFrame windowFrame = (IVsWindowFrame)window.Frame;

                    // add lookup information
                    viewLookup[accessKey][view.DockingPaneName] = new ViewLookUp(view, window);
                    view.IsDockingPaneVisible = true;
                    paneViewLookup.Add(ModelPackage.GetPersistenceSlot(windowFrame), view.DockingPaneName);

                    if (!this.viewTypeNameLookup.ContainsKey(view.DockingPaneType.FullName))
                    {
                        this.viewTypeNameLookup[view.DockingPaneType.FullName] = new List <string>();
                    }
                    this.viewTypeNameLookup[view.DockingPaneType.FullName].Add(view.DockingPaneName);

                    // show window
                    windowFrame.Show();
                }
                else
                {
                    viewLookup[accessKey][view.DockingPaneName] = new ViewLookUp(view);

                    if (accessKey != TransientPanesKey)
                    {
                        this.packageController.AvailableShellVMsReversed[accessKey].VisibleDocumentPanes.Add(view);
                        if (this.packageController.AvailableShellVMsReversed[accessKey].SelectedDocumentPane == null)
                        {
                            this.packageController.AvailableShellVMsReversed[accessKey].SelectedDocumentPane = view;
                        }
                    }
                    else
                    {
                        this.SelectedShellViewModel.VisibleDocumentPanes.Add(view);
                        if (this.SelectedShellViewModel.SelectedDocumentPane == null)
                        {
                            this.SelectedShellViewModel.SelectedDocumentPane = view;
                        }
                    }
                    view.IsDockingPaneVisible = true;
                }
            }

            // show docking window
            if (!dockedInDocumentPane)
            {
                if (viewLookup[accessKey][view.DockingPaneName].Pane != null)
                {
                    if (((IVsWindowFrame)viewLookup[accessKey][view.DockingPaneName].Pane.Frame).IsVisible() != VSConstants.S_OK)
                    {
                        ((IVsWindowFrame)viewLookup[accessKey][view.DockingPaneName].Pane.Frame).Show();
                        viewLookup[accessKey][view.DockingPaneName].View.IsDockingPaneVisible = true;
                    }
                }
            }
            else
            {
                if (this.SelectedShellViewModel.HiddenDocumentPanes.Contains(view))
                {
                    this.SelectedShellViewModel.HiddenDocumentPanes.Remove(view);
                    this.SelectedShellViewModel.VisibleDocumentPanes.Add(view);

                    if (this.SelectedShellViewModel.SelectedDocumentPane == null)
                    {
                        this.SelectedShellViewModel.SelectedDocumentPane = view;
                    }
                }
                view.IsDockingPaneVisible = true;
            }

            if (this.IsTransientViewModel(view.GetType()))
            {
                // update all IsDockingPaneVisible
                foreach (ShellMainViewModel v in this.packageController.AvailableShellVMs.Keys)
                {
                    BaseDockingViewModel foundVm = v.FindViewModel(view.GetType());
                    foundVm.IsDockingPaneVisible = true;
                }
            }
        }
 /// <summary>
 /// Constructor.
 /// </summary>
 /// <param name="viewModelToOpen">View model that needs to be opened.</param>
 public OpenViewModelEventArgs(BaseDockingViewModel viewModelToOpen)
     : this(null, viewModelToOpen)
 {
 }
 /// <summary>
 /// Constructor.
 /// </summary>
 /// <param name="sourceViewModel">View model that triggers the event.</param>
 public BringToFrontViewModelRequestEventArgs(BaseDockingViewModel sourceViewModel)
     : base(sourceViewModel)
 {
 }
        /// <summary>
        /// Constuctor.
        /// </summary>
        /// <param name="viewModelStore">The store this view model belongs to.</param>
        public ModelContextViewModel(ViewModelStore viewModelStore, BaseModelContext baseModelContext, bool isLocked)
            : base(viewModelStore)
        {
            this.modelContext = baseModelContext;
            
            this.copyCommand = new DelegateCommand(CopyCommand_Executed, CopyCommand_CanExecute);
            this.pasteCommand = new DelegateCommand(PasteCommand_Executed, PasteCommand_CanExecute);
            this.copyAllTreeCommand = new DelegateCommand(CopyAllTreeCommand_Executed, CopyAllTreeCommand_CanExecute);
            this.copyEmbeddingTreeCommand = new DelegateCommand(CopyEmbeddingTreeCommand_Executed, CopyAllTreeCommand_CanExecute);
            this.copyReferenceTreeCommand = new DelegateCommand(CopyReferenceTreeCommand_Executed, CopyAllTreeCommand_CanExecute);
            //this.cutCommand = new DelegateCommand(CutCommand_Executed, CutCommand_CanExecute);
            this.optimizeCommand = new DelegateCommand(OptimizeCommand_Executed);

            if (baseModelContext is ModelContext)
            {
                ModelContext modelContext = baseModelContext as ModelContext;

                this.modelTreeViewModel = new ModelTreeViewModel(viewModelStore, this, modelContext.ViewContext.DomainModelTreeView);
                this.modelTreeViewModel.IsLocked = isLocked;
                this.diagramViewModel = new DiagramViewModel(viewModelStore, this, modelContext.ViewContext.DiagramView);
                this.serializationViewModel = new SerializationViewModel(viewModelStore, modelContext.SerializationModel);

                this.modelContextType = ModelContextViewType.ModelContext;
            }
            else if( baseModelContext is ExternModelContext)
            {
                ExternModelContext modelContext = baseModelContext as ExternModelContext;
                if (modelContext.ModelContext != null)
                {
                    this.AddModelContext(modelContext.ModelContext);
                }

            	this.EventManager.GetEvent<ModelElementLinkAddedEvent>().Subscribe(this.Store.DomainDataDirectory.GetDomainRelationship(ExternModelContextReferencesModelContext.DomainClassId),
                	true, this.modelContext.Id, new System.Action<ElementAddedEventArgs>(OnModelContextAdded));
                this.EventManager.GetEvent<ModelElementLinkDeletedEvent>().Subscribe(this.Store.DomainDataDirectory.GetDomainRelationship(ExternModelContextReferencesModelContext.DomainClassId),
                	true, this.modelContext.Id, new System.Action<ElementDeletedEventArgs>(OnModelContextRemoved));
                this.EventManager.GetEvent<ModelRolePlayerChangedEvent>().Subscribe(this.Store.DomainDataDirectory.GetDomainRole(ExternModelContextReferencesModelContext.ExternModelContextDomainRoleId),
                	new System.Action<RolePlayerChangedEventArgs>(OnModelContextChanged));
                this.EventManager.GetEvent<ModelRolePlayerChangedEvent>().Subscribe(this.Store.DomainDataDirectory.GetDomainRole(ExternModelContextReferencesModelContext.ModelContextDomainRoleId),
                	new System.Action<RolePlayerChangedEventArgs>(OnModelContextChanged));                

                this.modelContextType = ModelContextViewType.ExternModelContext;
                
            }
            else if (baseModelContext is LibraryModelContext)
            {
                LibraryModelContext modelContext = baseModelContext as LibraryModelContext;
                this.modelTreeViewModel = new ModelTreeViewModel(viewModelStore, this, modelContext.ViewContext.DomainModelTreeView);
                this.modelTreeViewModel.IsLocked = isLocked;
                this.diagramViewModel = new DiagramViewModel(viewModelStore, this, modelContext.ViewContext.DiagramView);
                this.modelContextType = ModelContextViewType.LibraryContext;
                this.serializationViewModel = new SerializationViewModel(viewModelStore, modelContext.SerializationModel);
            }

            this.selectedItem = this.ModelTreeViewModel;

            if( this.ModelContext != null )
                this.EventManager.GetEvent<ModelElementPropertyChangedEvent>().Subscribe(
                    this.Store.DomainDataDirectory.GetDomainProperty(BaseModelContext.NameDomainPropertyId), this.ModelContext.Id, new System.Action<ElementPropertyChangedEventArgs>(NamePropertyChanged));
        }
 /// <summary>
 /// Constructor.
 /// </summary>
 /// <param name="sourceViewModel">View model that triggers the event.</param>
 /// <param name="bRemove"></param>
 public CloseViewModelRequestEventArgs(BaseDockingViewModel sourceViewModel, bool bRemove)
     : base(sourceViewModel)
 {
     this.ShouldRemoveVM = bRemove;
 }
 /// <summary>
 /// Constructor.
 /// </summary>
 /// <param name="sourceViewModel">View model that triggers the event.</param>
 public CloseViewModelRequestEventArgs(BaseDockingViewModel sourceViewModel)
     : this(sourceViewModel, false)
 {
 }