Exemple #1
0
        async void AddItem_Clicked(object sender, EventArgs e)
        {
            if (IsBusy)
            {
                return;
            }
            IsBusy = true;
            viewModel.Items.Clear();
            BuilderContext Context = new BuilderContext(new Player()
            {
                Name = "New Player"
            });
            PluginManager manager = new PluginManager();

            manager.plugins.Add(new SpellPoints());
            manager.plugins.Add(new SingleLanguage());
            Context.Plugins            = manager;
            Context.UndoBuffer         = new LinkedList <Player>();
            Context.RedoBuffer         = new LinkedList <Player>();
            Context.UnsavedChanges     = 0;
            ItemsListView.SelectedItem = null;
            LoadingProgress loader = new LoadingProgress(Context);
            LoadingPage     l      = new LoadingPage(loader);
            await Navigation.PushModalAsync(l);

            var t = l.Cancel.Token;

            try
            {
                await loader.Load(t).ConfigureAwait(false);

                t.ThrowIfCancellationRequested();
                PlayerBuildModel model = new PlayerBuildModel(Context);
                Device.BeginInvokeOnMainThread(async() =>
                {
                    await Navigation.PopModalAsync(false);
                    await Navigation.PushModalAsync(new BuildPage(model));
                });
            }
            catch (OperationCanceledException)
            {
            }
            finally
            {
                IsBusy = false;
            }
            // Manually deselect item
        }
Exemple #2
0
        async void OnItemSelected(object sender, SelectedItemChangedEventArgs args)
        {
            if (IsBusy)
            {
                return;
            }
            IsBusy = true;
            viewModel.Items.Clear();
            var item = args.SelectedItem as Character;

            if (item == null)
            {
                return;
            }
            BuilderContext Context = new BuilderContext(item.Player);
            PluginManager  manager = new PluginManager();

            manager.plugins.Add(new SpellPoints());
            manager.plugins.Add(new SingleLanguage());
            Context.Plugins = manager;

            Task.Run(async() =>
            {
                if (Context.Player.FilePath is IFile file)
                {
                    string name  = file.Name;
                    IFile target = await(await App.Storage.CreateFolderAsync("Backups", CreationCollisionOption.OpenIfExists).ConfigureAwait(false)).CreateFileAsync(name, CreationCollisionOption.ReplaceExisting).ConfigureAwait(false);
                    using (Stream fout = await target.OpenAsync(FileAccess.ReadAndWrite))
                    {
                        using (Stream fin = await file.OpenAsync(FileAccess.Read))
                        {
                            await fin.CopyToAsync(fout);
                        }
                    };
                }
            }).Forget();
            Context.UndoBuffer         = new LinkedList <Player>();
            Context.RedoBuffer         = new LinkedList <Player>();
            Context.UnsavedChanges     = 0;
            ItemsListView.SelectedItem = null;
            LoadingProgress loader = new LoadingProgress(Context);
            LoadingPage     l      = new LoadingPage(loader);
            await Navigation.PushModalAsync(l);

            var t = l.Cancel.Token;

            try
            {
                await loader.Load(t).ConfigureAwait(false);

                t.ThrowIfCancellationRequested();
                PlayerBuildModel model = new PlayerBuildModel(Context);
                Device.BeginInvokeOnMainThread(async() =>
                {
                    await Navigation.PopModalAsync(false);
                    await Navigation.PushModalAsync(new BuildPage(model));
                });
            }
            catch (OperationCanceledException)
            {
            }
            finally
            {
                IsBusy = false;
            }
            // Manually deselect item
        }