예제 #1
0
        /// <summary>
        /// Sets the object display control.
        /// </summary>
        /// <param name="objectDisplayType">Display type of the object.</param>
        /// <param name="removeUntilAfterContext">The context to remove until.</param>
        private void SetObjectDisplayControl(string objectDisplayType, object removeUntilAfterContext = null)
        {
            //Reverse order of the currentContextItems in case removeUntilAfterContext !=null
            //Also copies it to an IEnumerable to prevent collection changed error in the following foreach loop
            var currentContextItemsInReverse = this.CurrentContext.Reverse<object>();

            bool breakAfter = false;

            foreach (var context in currentContextItemsInReverse)
            {
                if (removeUntilAfterContext != null && context == removeUntilAfterContext)
                    breakAfter = true;

                MessageBus.Current.SendMessage(new RemoveContextMessage(context));

                if (breakAfter)
                    break;
            }

            if (objectDisplayType == null) return;

            var objectDisplay =
                ObjectTypeDisplayControls.FirstOrDefault(
                    objectDisplayControl =>
                    objectDisplayControl.ObjectTypeToDisplay == objectDisplayType);

            CurrentlySelectedContextProvider = objectDisplay.ContextProvider;

            MessageBus.Current.SendMessage(new MoveToDetailsViewMessage(CurrentlySelectedContextProvider.ObjectTypeProvided, MoveStrategy.MoveBackwards));
        }
예제 #2
0
        public InfiniteAccordionView()
        {
            InitializeComponent();
            ObjectTypeDisplayControls = new ObservableCollection<IObjectTypeDisplay>();
            ContextBorderControls = new ObservableCollection<ContextBorder>();
            CurrentContext = new List<object>();

            MessageBus.Current.Listen<RemoveContextMessage>().SubscribeOnDispatcher().Subscribe(message =>
            {
                this.CurrentContext.Remove(message.Context);
                SetupUI();
            });

            MessageBus.Current.Listen<MoveToDetailsViewMessage>().SubscribeOnDispatcher().Subscribe(OnMoveToDetailsViewMessage);

            CurrentlySelectedContextProvider = null;

            this.Loaded += InfiniteAccordionViewLoaded;
        }
예제 #3
0
        /// <summary>
        /// Moves to details view helper.
        /// </summary>
        /// <param name="message">The message.</param>
        private void MoveToDetailsViewHelper(MoveToDetailsViewMessage message)
        {
            switch (message.Strategy)
            {
                case MoveStrategy.AddContextToExisting:
                    if (CurrentlySelectedContextProvider.SelectedContext != null)
                    {
                        this.CurrentContext.Add(CurrentlySelectedContextProvider.SelectedContext);
                        //Notify that the context was added
                        MessageBus.Current.SendMessage(new AddContextMessage(CurrentlySelectedContextProvider.SelectedContext));
                    }
                    break;
                case MoveStrategy.StartFresh:
                    foreach (var context in CurrentContext.ToArray())
                    {
                        this.CurrentContext.Remove(context);
                        //Notify that the context was removed
                        MessageBus.Current.SendMessage(new RemoveContextMessage(context));
                    }
                    break;
                case MoveStrategy.MoveBackwards:
                    var contextToMoveTo = this.CurrentContext.Where(o => o.GetType().ToString() == message.TypeOfDetailsView).LastOrDefault();
                    if (contextToMoveTo != null)
                    {
                        SetObjectDisplayControl(contextToMoveTo.GetType().ToString(), contextToMoveTo);
                    }
                    break;
            }

            var objectDisplay = ObjectTypeDisplay(message.TypeOfDetailsView);
            if (objectDisplay != null && objectDisplay.ContextProvider != null)
                CurrentlySelectedContextProvider = objectDisplay.ContextProvider;

            //Setup the UI
            SetupUI();
        }
예제 #4
0
파일: Messages.cs 프로젝트: FoundOPS/server
 public ContextProviderChangedMessage(IProvideContext contextProvider)
 {
     CurrentContextProvider = contextProvider;
 }