static NavigationContextConfig GetContextConfig(NavigationData navigationData)
        {
            if (navigationData == null)
                return null;

            Dictionary<string, object> contextData = new Dictionary<string, object>();
            contextData[NavigationData.NAVIGATION_DATA] = navigationData;
            return new NavigationContextConfig()
            {
                NavigationContextDisplayLabel = navigationData.DisplayName,
                AdditionalContextVariables = contextData
            };
        }
 static void PushTransientState(string name, string displayLabel, NavigationData navigationData)
 {
     WorkflowState newState = WorkflowState.CreateTransientState(name, displayLabel, false, "emulators", true, WorkflowType.Workflow);
     IWorkflowManager workflowManager = ServiceRegistration.Get<IWorkflowManager>();
     workflowManager.NavigatePushTransientAsync(newState, GetContextConfig(navigationData));
 }
 static void PushState(Guid stateId, NavigationData navigationData)
 {
     IWorkflowManager workflowManager = ServiceRegistration.Get<IWorkflowManager>();
     workflowManager.NavigatePush(stateId, GetContextConfig(navigationData));
 }
 NavigationData getStartupNavigationData()
 {
     NavigationData navigationData = new NavigationData();
     List<ListItem> items;
     switch (startupState)
     {
         case StartupState.GROUPS:
             navigationData.DisplayName = "[Emulators.Groups]";
             var groups = RomGroup.GetAll();
             items = groups.Select(g => (ListItem)new GroupViewModel(g, this)).ToList();
             break;
         case StartupState.PCGAMES:
             navigationData.DisplayName = "[Emulators.PCGames]";
             var games = Emulator.GetPC().Games;
             items = games.Select(g => (ListItem)new GameViewModel(g, this)).ToList();
             break;
         case StartupState.FAVOURITES:
             navigationData.DisplayName = "[Emulators.Favourites]";
             BaseCriteria favCriteria = new BaseCriteria(DBField.GetField(typeof(Game), "Favourite"), "=", true);
             var favourites = EmulatorsCore.Database.Get<Game>(favCriteria);
             items = favourites.Select(g => (ListItem)new GameViewModel(g, this)).ToList();
             break;
         case StartupState.EMULATORS:
         default:
             navigationData.DisplayName = "[Emulators.Emulators]";
             var emulators = Emulator.GetAll(true);
             items = emulators.Select(e => (ListItem)new EmulatorViewModel(e, this)).ToList();
             break;
     }
     navigationData.StartupState = startupState;
     navigationData.ItemsList = items;
     return navigationData;
 }
        void updateState(NavigationContext context)
        {
            bool updateList = false;
            navigationData = GetNavigationData(context);
            if (context.WorkflowState.StateId == Guids.ViewItemsState && (navigationData == null || navigationData.StartupState != startupState))
            {
                updateList = true;
                navigationData = getStartupNavigationData();
                context.SetContextVariable(NavigationData.NAVIGATION_DATA, navigationData);
            }

            if (navigationData != null)
            {
                Header = navigationData.DisplayName;
                ItemsList items = Items;
                if (items != null && updateList)
                {
                    items.Clear();
                    foreach (ListItem item in navigationData.ItemsList)
                        items.Add(item);
                    items.FireChange();
                }
                else
                {
                    items = new ItemsList();
                    foreach (ListItem item in navigationData.ItemsList)
                        items.Add(item);
                    Items = items;
                }
            }
        }
        public void GroupSelected(RomGroup group)
        {
            group.Refresh();
            List<ListItem> items = new List<ListItem>();
            foreach (DBItem item in group.GroupItems)
            {
                Game game = item as Game;
                if (game != null)
                {
                    items.Add(new GameViewModel(game, this));
                    continue;
                }

                RomGroup subGroup = item as RomGroup;
                if (subGroup != null)
                {
                    items.Add(new GroupViewModel(subGroup, this));
                    continue;
                }

                Emulator emulator = item as Emulator;
                if (emulator != null)
                    items.Add(new EmulatorViewModel(emulator, this));
            }

            NavigationData navigationData = new NavigationData() { DisplayName = group.Title, ItemsList = items };
            PushTransientState("emuSubGroup", navigationData.DisplayName, navigationData);
        }
 public void EmulatorSelected(Emulator emulator)
 {
     List<ListItem> items = emulator.Games.Select(g => (ListItem)new GameViewModel(g, this)).ToList();
     NavigationData navigationData = new NavigationData() { DisplayName = emulator.Title, ItemsList = items };
     PushTransientState("emuGames", navigationData.DisplayName, navigationData);
 }