Ejemplo n.º 1
0
        /// <summary>
        /// This method closes all currently open views
        /// </summary>
        /// <returns>True if the handler successfully closed all views. False if it didn't close all views or generally does not handle view closing</returns>
        /// <exception cref="System.NotImplementedException"></exception>
        public bool CloseAllViews()
        {
            var topLevelViews = TopLevelViews.ToArray();

            foreach (var view in topLevelViews)
            {
                TopLevelViews.Remove(view);
                if (view.TopLevelWindow != null)
                {
                    view.TopLevelWindow.Close();
                }
                view.RaiseViewClosed();
            }
            SelectedTopLevelView       = -1;
            SelectedTopLevelViewResult = null;
            TopLevelViewCount          = 0;

            var normalViews = NormalViews.ToArray();

            foreach (var view in normalViews)
            {
                NormalViews.Remove(view);
                if (view.TopLevelWindow != null)
                {
                    view.TopLevelWindow.Close();
                }
                view.RaiseViewClosed();
            }
            SelectedNormalView       = -1;
            SelectedNormalViewResult = null;
            NormalViewCount          = 0;

            return(true);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// This method is invoked when a view that is associated with a certain model should be closed
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public bool CloseViewForModel(object model)
        {
            foreach (var view in TopLevelViews)
            {
                if (view.Model != null && view.Model == model)
                {
                    TopLevelViews.Remove(view);
                    SelectedTopLevelView       = TopLevelViews.Count - 1;
                    SelectedTopLevelViewResult = SelectedTopLevelView > -1 ? TopLevelViews[SelectedTopLevelView] : null;
                    TopLevelViewCount          = TopLevelViews.Count;
                    if (view.TopLevelWindow != null)
                    {
                        view.TopLevelWindow.Close();
                    }
                    view.RaiseViewClosed();
                    return(true);
                }
            }

            foreach (var view in NormalViews)
            {
                if (view.Model != null && view.Model == model)
                {
                    NormalViews.Remove(view);
                    SelectedNormalView       = NormalViews.Count - 1;
                    SelectedNormalViewResult = SelectedNormalView > -1 ? NormalViews[SelectedNormalView] : null;
                    NormalViewCount          = NormalViews.Count;
                    if (view.TopLevelWindow != null)
                    {
                        view.TopLevelWindow.Close();
                    }
                    view.RaiseViewClosed();
                    return(true);
                }
                foreach (var localView in view.LocalViews)
                {
                    if (localView.Model != null && localView.Model == model)
                    {
                        view.LocalViews.Remove(localView);
                        if (view.SelectedLocalViewIndex >= view.LocalViews.Count)
                        {
                            view.SelectedLocalViewIndex = view.LocalViews.Count - 1;
                        }
                        localView.RaiseViewClosed();
                        return(true);
                    }
                }
            }

            return(false);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Opens the top level view in a separate window.
        /// </summary>
        /// <param name="context">The context.</param>
        /// <param name="messageBoxResult">The message box result.</param>
        /// <param name="viewResult">The view result.</param>
        /// <returns>True if successfully opened</returns>
        private bool OpenTopLevelView(RequestContext context, MessageBoxResult messageBoxResult, ViewResult viewResult)
        {
            if (messageBoxResult != null && string.IsNullOrEmpty(viewResult.ViewIconResourceKey))
            {
                viewResult.ViewIconResourceKey = messageBoxResult.ModelMessageBox.IconResourceKey;
            }

            //Brush iconBrush = Brushes.Transparent;
            //if (!string.IsNullOrEmpty(viewResult.ViewIconResourceKey))
            //    try
            //    {
            //        var resource = Application.Current.FindResource(viewResult.ViewIconResourceKey);
            //        if (resource != null)
            //            iconBrush = (Brush) resource;
            //    }
            //    catch
            //    {
            //        iconBrush = Brushes.Transparent;
            //    }

            // If we respect local views and the view is in fact a local view, and we have a normal view already open, then we open it in a local way only.
            if (viewResult.ViewScope == ViewScope.Local && HandleLocalViewsSpecial && SelectedNormalView > -1)
            {
                var selectedView = NormalViews[SelectedNormalView];
                if (selectedView == null)
                {
                    return(false);
                }
                selectedView.LocalViews.Add(viewResult);
                if (viewResult.MakeViewVisibleOnLaunch)
                {
                    selectedView.SelectedLocalViewIndex = selectedView.LocalViews.Count - 1;
                }
                return(true);
            }

            //Need to make sure we do not open more than allowed - Popups should not close underlying views.
            if (viewResult.ViewLevel != ViewLevel.Popup && MaximumTopLevelViewCount > -1)
            {
                var inplaceTopLevelviews = TopLevelViews.Where(v => v.TopLevelWindow == null).ToList();
                while (inplaceTopLevelviews.Count + 1 > MaximumTopLevelViewCount)
                {
                    CloseViewForModel(inplaceTopLevelviews[0].Model);
                    inplaceTopLevelviews.RemoveAt(0);
                }
            }

            TopLevelViews.Add(viewResult);

            if (viewResult.MakeViewVisibleOnLaunch && !(TopLevelViewLaunchMode == ViewLaunchMode.Popup || (TopLevelViewLaunchMode == ViewLaunchMode.InPlaceExceptPopups && viewResult.ViewLevel == ViewLevel.Popup)))
            {
                SelectedTopLevelView       = TopLevelViews.Count - 1;
                SelectedTopLevelViewResult = SelectedTopLevelView > -1 ? TopLevelViews[SelectedTopLevelView] : null;
                if (viewResult.View != null)
                {
                    if (!FocusHelper.FocusFirstControlDelayed(viewResult.View))
                    {
                        FocusHelper.FocusDelayed(viewResult.View);
                    }
                }
            }
            TopLevelViewCount = TopLevelViews.Count;

            if (TopLevelViewLaunchMode == ViewLaunchMode.Popup || (TopLevelViewLaunchMode == ViewLaunchMode.InPlaceExceptPopups && viewResult.ViewLevel == ViewLevel.Popup))
            {
                var window = new Window
                {
                    Title                 = viewResult.ViewTitle,
                    Content               = viewResult.View,
                    DataContext           = viewResult.Model,
                    WindowStartupLocation = WindowStartupLocation.CenterScreen,
                    Owner                 = this
                };

                window.SetBinding(TitleProperty, new Binding("ViewTitle")
                {
                    Source = viewResult
                });

                // Setting the size strategy
                var strategy = SimpleView.GetSizeStrategy(viewResult.View);
                switch (strategy)
                {
                case ViewSizeStrategies.UseMinimumSizeRequired:
                    window.SizeToContent = SizeToContent.WidthAndHeight;
                    break;

                case ViewSizeStrategies.UseMaximumSizeAvailable:
                    window.SizeToContent = SizeToContent.Manual;
                    window.Height        = SystemParameters.WorkArea.Height;
                    window.Width         = SystemParameters.WorkArea.Width;
                    break;

                case ViewSizeStrategies.UseSuggestedSize:
                    window.SizeToContent = SizeToContent.Manual;
                    window.Height        = SimpleView.GetSuggestedHeight(viewResult.View);
                    window.Width         = SimpleView.GetSuggestedWidth(viewResult.View);
                    break;
                }

                viewResult.TopLevelWindow = window;

                if (context.Result is MessageBoxResult)
                {
                    window.SetResourceReference(StyleProperty, "CODE.Framework.Wpf.Mvvm.Shell-TopLevelMessageBoxWindowStyle");
                }
                else
                {
                    window.SetResourceReference(StyleProperty, "CODE.Framework.Wpf.Mvvm.Shell-TopLevelWindowStyle");
                }

                if (viewResult.View != null)
                {
                    foreach (InputBinding binding in viewResult.View.InputBindings)
                    {
                        window.InputBindings.Add(binding);
                    }
                }

                if (!FocusHelper.FocusFirstControlDelayed(window))
                {
                    FocusHelper.FocusDelayed(window);
                }

                if (viewResult.IsModal)
                {
                    window.ShowDialog();
                }
                else
                {
                    window.Show();
                }
            }


            //if (iconBrush != null)
            //{
            //    try
            //    {
            //        // TODO: Implement the icon logic
            //        //var iconRect = new Canvas {Height = 96, Width = 96, Background = iconBrush};
            //        //window.Icon = iconRect.ToIconSource();
            //    }
            //    catch
            //    {
            //    }
            //}

            return(true);
        }