コード例 #1
0
        private static async Task GenerateAndShowViewFor(ViewStack viewStack)
        {
            {
                await Dialog.ShowInfoDialog("Generating UIs from C# classes", "The next examples will show generating" +
                                            " views from normal C# classes. In this example MyUserModel is passed to the generator", "Show example");

                var        schemaGenerator = new ModelToJsonSchema();
                var        userModelType   = typeof(MyUserModel);
                JsonSchema schema          = schemaGenerator.ToJsonSchema("" + userModelType, userModelType);
                Log.d(JsonWriter.AsPrettyString(schema));
                await LoadModelIntoGeneratedView(viewStack, schemaGenerator, schema);
            }
            {
                await Dialog.ShowInfoDialog("Generating UIs from JSON schemas",
                                            "This time the json schema is loaded from an JSON schema string", "Show example");

                var        schemaGenerator = new ModelToJsonSchema();
                JsonSchema schema          = JsonReader.GetReader().Read <JsonSchema>(SomeJsonSchemaExamples.jsonSchema1);
                await LoadJsonModelIntoGeneratedJsonSchemaView(viewStack, schemaGenerator, schema, SomeJsonSchemaExamples.json1);
            }
            {
                await Dialog.ShowInfoDialog("Editing arrays & lists:",
                                            "Both primitave lists but also List<MyClass1> can be shown and edited", "Show list example");

                var        schemaGenerator = new ModelToJsonSchema();
                JsonSchema schema          = JsonReader.GetReader().Read <JsonSchema>(SomeJsonSchemaExamples.jsonSchema2);
                await LoadJsonModelIntoGeneratedJsonSchemaView(viewStack, schemaGenerator, schema, SomeJsonSchemaExamples.json2);
            }
        }
コード例 #2
0
        private static async Task LoadJsonModelIntoGeneratedJsonSchemaView(
            ViewStack viewStack, ModelToJsonSchema schemaGenerator, JsonSchema schema, string jsonModel)
        {
            JObject          model         = JsonReader.GetReader().Read <JObject>(jsonModel);
            JsonSchemaToView viewGenerator = new JsonSchemaToView(schemaGenerator);
            GameObject       generatedView = await viewGenerator.ToView(schema);

            viewStack.ShowView(generatedView);

            var presenter = new JsonSchemaPresenter(viewGenerator);

            presenter.targetView = generatedView;

            Log.d("Model BEFORE changes: " + model.ToPrettyString());
            var changedModel = await presenter.LoadModelIntoView(model.DeepClone() as JObject);

            await JsonSchemaPresenter.ChangesSavedViaConfirmButton(generatedView);

            Log.d("Model AFTER changes: " + changedModel.ToPrettyString());

            viewStack.SwitchBackToLastView(generatedView);
            var changedFields = MergeJson.GetDiff(model, changedModel);

            Log.d("Fields changed: " + changedFields?.ToPrettyString());
        }
コード例 #3
0
ファイル: Task4_Timer.cs プロジェクト: shoshiiran/cscore
        public static async Task ShowIn(ViewStack viewStack)
        {
            var model     = new MyModel();
            var presenter = new MyPresenter();

            presenter.targetView = viewStack.ShowView("7GUIs_Task4_Timer");
            await presenter.LoadModelIntoView(model);
        }
コード例 #4
0
        public static async Task ShowIn(ViewStack viewStack)
        {
            TestDataStore();

            DataStore <MyModel> store     = NewDataStore();
            MyPresenter         presenter = new MyPresenter();

            presenter.targetView = viewStack.ShowView("7GUIs_Task6_CircleDrawer");
            await presenter.LoadModelIntoView(store);
        }
コード例 #5
0
        public static async Task ShowIn(ViewStack viewStack)
        {
            var model = new MyModel()
            {
                degreeInCelsius = 0
            };
            var presenter = new MyPresenter();

            presenter.targetView = viewStack.ShowView("7GUIs_Task2_TemperatureConverter");
            await presenter.LoadModelIntoView(model);
        }
コード例 #6
0
 /// <summary>
 /// Добавляет окно в стек окон. В случае положительного флага, вызывает удаление предыдущего окна.
 /// </summary>
 /// <param name="window"></param>
 /// <param name="flag"></param>
 private static void Push(Window window, bool flag)
 {
     if (flag)
     {
         if (ViewStack.Count > 0)
         {
             Close(ViewStack.ElementAt(0));
             Pop();
         }
     }
     ViewStack.Push(window);
 }
コード例 #7
0
ファイル: Task5_CRUD.cs プロジェクト: shoshiiran/cscore
        public static async Task ShowIn(ViewStack viewStack)
        {
            MyModel model = new MyModel(null, ImmutableList <MyUser> .Empty);
            Middleware <MyModel>      exampleMiddleware = Middlewares.NewLoggingMiddleware <MyModel>();
            UndoRedoReducer <MyModel> undoLogic         = new UndoRedoReducer <MyModel>();
            DataStore <MyModel>       store             = new DataStore <MyModel>(undoLogic.Wrap(MyReducer), model, exampleMiddleware);

            MyPresenter presenter = new MyPresenter();

            presenter.targetView = viewStack.ShowView("7GUIs_Task5_CRUD");
            await presenter.LoadModelIntoView(store);
        }
コード例 #8
0
 private void SwitchBackToLastViewViaBackKey(ViewStack viewStack, GameObject viewToClose)
 {
     Log.MethodEnteredWith("ViewStack" + viewStack, "viewToClose=" + viewToClose);
     if (!viewStack.SwitchBackToLastView(viewToClose))
     {
         // The last view was reached so the switch back could not be performed
         if (destroyFinalView)
         {
             viewStack.DestroyViewStack();
         }
     }
 }
コード例 #9
0
        public BaseFeature[] LoadFeatures(ViewStack parent)
        {
            var result   = new List <BaseFeature>();
            var assembly = typeof(ApplicationService).Assembly;

            var features = FeatureService.LoadFeatures();

            foreach (var feature in features)
            {
                feature.Metadata.IconPath = string.Format("pack://application:,,,/{0}", feature.Metadata.IconPath);
            }

            return(features);
        }
コード例 #10
0
        private static async Task LoadModelIntoGeneratedView(ViewStack viewStack, ModelToJsonSchema schemaGenerator, JsonSchema schema)
        {
            MyUserModel model = NewExampleUserInstance();
            {
                await Dialog.ShowInfoDialog("Manually connecting the model instance to the view", "First an example to connect the " +
                                            "model to a generated view via a manual presenter 'MyManualPresenter1'", "Show manual presenter example");

                var        viewGenerator = new JsonSchemaToView(schemaGenerator);
                GameObject generatedView = await viewGenerator.ToView(schema);

                viewStack.ShowView(generatedView);

                var presenter = new MyManualPresenter1();
                presenter.targetView = generatedView;

                Log.d("Model BEFORE changes: " + JsonWriter.AsPrettyString(model));
                await presenter.LoadModelIntoView(model);

                viewStack.SwitchBackToLastView(generatedView);
                Log.d("Model AFTER changes: " + JsonWriter.AsPrettyString(model));
            }
            {
                await Dialog.ShowInfoDialog("Using JsonSchemaPresenter to autmatically connect the model instance and view",
                                            "The second option is to use a generic JObjectPresenter to connect the model to the generated view",
                                            "Show JsonSchemaPresenter example");

                var        viewGenerator = new JsonSchemaToView(schemaGenerator);
                GameObject generatedView = await viewGenerator.ToView(schema);

                viewStack.ShowView(generatedView);

                var presenter = new JsonSchemaPresenter(viewGenerator);
                presenter.targetView = generatedView;

                Log.d("Model BEFORE changes: " + JsonWriter.AsPrettyString(model));
                MyUserModel changedModel = await presenter.LoadViaJsonIntoView(model);

                viewStack.SwitchBackToLastView(generatedView);

                Log.d("Model AFTER changes: " + JsonWriter.AsPrettyString(changedModel));
                var changedFields = MergeJson.GetDiff(model, changedModel);
                Log.d("Fields changed: " + changedFields?.ToPrettyString());
            }
        }
コード例 #11
0
ファイル: ActionMenu.cs プロジェクト: cs-util-com/cscore
        public static async Task <ActionMenu.Entry> ShowActionMenu(this ViewStack self, ActionMenu menu, string menuPrefabName = ActionMenu.DEFAULT_MENU)
        {
            var eventName = "ShowActionMenu " + menu.menuId;
            var timing    = Log.MethodEntered(eventName);
            var menuUiGo  = self.ShowView(menuPrefabName);
            var presenter = new ActionMenu.Presenter();

            presenter.targetView = menuUiGo;
            try {
                var selectedEntry = (await presenter.LoadModelIntoView(menu)).clickedEntry;
                menuUiGo.Destroy(); // Close the menu UI again
                EventBus.instance.Publish(EventConsts.catMethod, eventName + " done: " + selectedEntry.name);
                Log.MethodDone(timing);
                return(selectedEntry);
            }
            catch (TaskCanceledException) { // If the user canceled the action selection:
                menuUiGo.Destroy();         // Close the menu UI again
                EventBus.instance.Publish(EventConsts.catMethod, eventName + " canceled");
                Log.MethodDone(timing);
                return(null);
            }
        }
コード例 #12
0
        public static async Task ShowIn(ViewStack viewStack)
        {
            // Call model unit tests manually before the UI is shown:
            CellsModelTests.TestFromAndToRowName();
            CellsModelTests.TestDataStoreTransitiveChanges();

            CellsModel model = new CellsModel(ImmutableDictionary <CellPos, Cell> .Empty);
            Middleware <CellsModel>      logging   = Middlewares.NewLoggingMiddleware <CellsModel>();
            UndoRedoReducer <CellsModel> undoLogic = new UndoRedoReducer <CellsModel>();
            DataStore <CellsModel>       store     = new DataStore <CellsModel>(undoLogic.Wrap(CellsReducers.MainReducer), model, logging);

            MyPresenter presenter = new MyPresenter();

            presenter.targetView = viewStack.ShowView("7GUIs_Task7_Cells");
            await presenter.LoadModelIntoView(store);

            await TaskV2.Delay(2000);

            Toast.Show("Now simulating some table model changes..");
            // Simulate changes in the model to check if the UI updates correctly:
            CellsModelTests.SimulateSomeChangesInModel(store);
        }
コード例 #13
0
        public PopoverPane()
            : base("Popover")
        {
            if (PopoverWindow == null)
            {
                PopoverWindow = new Window()
                {
                    Content               = this,
                    Title                 = iApp.Instance.Title,
                    Width                 = 800,
                    Height                = 600,
                    Owner                 = Application.Current.MainWindow,
                    ResizeMode            = ResizeMode.NoResize,
                    WindowStartupLocation = WindowStartupLocation.CenterOwner,
                };

                PopoverWindow.Closing += (o, e) =>
                {
                    e.Cancel = true;
                    PopoverWindow.Hide();

                    if (Application.Current.MainWindow != null)
                    {
                        Application.Current.MainWindow.IsHitTestVisible = PopoverWindow.IsHitTestVisible;
                        Application.Current.MainWindow.Focusable        = PopoverWindow.Focusable;
                        Application.Current.MainWindow.Activate();
                    }
                };
            }

            PopoverWindow.IsVisibleChanged += (o, e) =>
            {
                if (!PopoverWindow.IsVisible)
                {
                    ViewStack.Clear();
                    Content = null;
                }
            };
        }
コード例 #14
0
        public FeatureView EnsureView(BaseFeature feature, ViewStack parent)
        {
            var view = parent.Children.OfType <FeatureView>().FirstOrDefault(it => it.Feature == feature);

            if (view == null)
            {
                string viewClass = feature.Metadata.ViewClass;
                if (viewClass.IsNotBlank())
                {
                    var viewType = typeof(FeatureView).Assembly.GetType(viewClass);
                    if (viewType != null)
                    {
                        view         = (FeatureView)Activator.CreateInstance(viewType);
                        view.Feature = feature;
                        parent.Children.Add(view);
                        view.OnCreated();
                    }
                }
            }

            return(view);
        }
コード例 #15
0
 /// <summary>
 /// Удаление предыдущего окна из стека.
 /// </summary>
 public static void Pop()
 {
     ViewStack.Pop();
 }
コード例 #16
0
 /// <summary>
 /// Возвращает экземпляр текущего окна.
 /// </summary>
 /// <returns></returns>
 public static Window GetView()
 {
     return(ViewStack.ElementAt(0));
 }
コード例 #17
0
 /// <summary>
 /// Закрывает окно, с которым ведется работа.
 /// </summary>
 public static void CloseView()
 {
     Close(ViewStack.ElementAt(0));
     Pop();
 }
コード例 #18
0
 /// <summary>
 /// Открывает новое окно, закрывая предыдущее.
 /// </summary>
 /// <param name="window"></param>
 public static void OpenNewWindowInShowDialog(Window window)
 {
     Push(window, true);
     ViewStack.ElementAt(0).ShowDialog();
 }
コード例 #19
0
ファイル: UnitTestMono.cs プロジェクト: cs-util-com/cscore
        public static IEnumerator RunTest <T>(string prefabName) where T : UnitTestMono
        {
            ViewStack viewStack = ViewStackHelper.MainViewStack();

            yield return(RunTest <T>(viewStack, prefabName));
        }
コード例 #20
0
ファイル: NavigatorDemo.cs プロジェクト: onamoni/edriven-gui
    override protected void CreateChildren()
    {
        base.CreateChildren();

        #region Controls

        Toolbar toolbar = new Toolbar();
        AddChild(toolbar);

        Button button = new Button
        {
            Text       = "Add data",
            SkinClass  = typeof(ImageButtonSkin),
            Icon       = ImageLoader.Instance.Load("Icons/add"),
            AutoRepeat = true
        };
        button.ButtonDown += delegate
        {
            _dataProvider.AddItem("data " + _random.Next(1, 100));
        };
        toolbar.AddContentChild(button);

        button = new Button
        {
            Text      = "Previous tab",
            SkinClass = typeof(ImageButtonSkin),
            Icon      = ImageLoader.Instance.Load("Icons/previous")
        };
        button.Click += delegate
        {
            _buttonBar.SelectedIndex--;
            _viewstack.Previous();
        };
        toolbar.AddContentChild(button);

        button = new Button
        {
            Text      = "Next tab",
            SkinClass = typeof(ImageButtonSkin),
            Icon      = ImageLoader.Instance.Load("Icons/next")
        };
        button.Click += delegate
        {
            _buttonBar.SelectedIndex++;
            _viewstack.Next();
        };
        toolbar.AddContentChild(button);

        #endregion

        #region Scroller

        Scroller scroller = new Scroller
        {
            SkinClass     = typeof(ScrollerSkin2),
            PercentWidth  = 100,
            PercentHeight = 100
        };
        //scroller.SetStyle("horizontalScrollPolicy", ScrollPolicy.On);
        //scroller.SetStyle("verticalScrollPolicy", ScrollPolicy.On);
        AddChild(scroller);

        Group viewport = new Group
        {
            MouseEnabled = true,
            Layout       = new VerticalLayout
            {
                HorizontalAlign = HorizontalAlign.Left,
                PaddingLeft     = 10,
                PaddingRight    = 10,
                PaddingTop      = 10,
                PaddingBottom   = 10,
                Gap             = 10
            }
        };
        scroller.Viewport = viewport;

        #endregion

        List <object> source = new List <object> {
            "Failure", "Teaches", "Success", "One", "Two", "Three", "Four", "Five", "Six"
        };

        _dataProvider = new ArrayList(source);

        viewport.AddChild(new Label {
            Text = "ButtonBar:"
        });

        #region Button bar

        _buttonBar = new ButtonBar
        {
            DataProvider = new ArrayList(new List <object> {
                "List 1", "List 2", "List 3", "List 4", "List 5"
            }),
            SkinClass        = typeof(ButtonBarSkin2),
            RequireSelection = true
        };
        _buttonBar.AddEventListener(Event.CHANGE, delegate(Event e)
        {
            IndexChangeEvent ice = e as IndexChangeEvent;
            if (null != ice)
            {
                int newIndex = ice.NewIndex;
                //Debug.Log("Changed to: " + newIndex);
                _viewstack.SelectedIndex = newIndex;
            }
        });
        viewport.AddChild(_buttonBar);

        #endregion

        #region ViewStack

        viewport.AddChild(new Label {
            Text = "ViewStack (having 5 lists as children):"
        });

        _viewstack = new ViewStack {
            ResizeToContent = true
        };
        viewport.AddChild(_viewstack);

        #endregion

        /* Factory is used for creating renderer instances */
        var factory = new ItemRendererFactory <DefaultItemRenderer>();

        /* LISTS */

        #region List 1

        List list = new List
        {
            Id = "list1",
            //Layout = new TileLayout { RequestedColumnCount = 4 },
            Width        = 200, Height = 200,
            DataProvider = _dataProvider,
            //ItemRenderer = new ItemRendererFactory <DefaultItemRenderer>(),

            /* ItemRendererFunction is used for switching between different factories, based on the supplied item */
            ItemRendererFunction = delegate { return(factory); }
        };
        _viewstack.AddChild(list);

        #endregion

        #region List 2

        list = new List
        {
            Id = "list2",
            //Layout = new TileLayout { RequestedColumnCount = 3 },
            Width        = 200, Height = 245,
            DataProvider = _dataProvider,
            //ItemRenderer = new ItemRendererFactory <DefaultItemRenderer>(),
            ItemRendererFunction = delegate { return(factory); }
        };
        _viewstack.AddChild(list);

        #endregion

        #region List 3

        list = new List
        {
            Id           = "list3",
            Width        = 400,
            Height       = 450,
            DataProvider = _dataProvider,
            SkinClass    = typeof(ListSkin2),
            ItemRenderer = new ItemRendererFactory <BigItemRenderer>()
        };
        _viewstack.AddChild(list);

        #endregion

        #region List 4

        list = new List
        {
            Id     = "list4",
            Width  = 600, Height = 800,
            Layout = new TileLayout {
                HorizontalGap = 0, VerticalGap = 0, RequestedRowCount = 4, RequestedColumnCount = 3
            },
            DataProvider = _dataProvider,
            SkinClass    = typeof(ListSkin2),
            ItemRenderer = new ItemRendererFactory <BigItemRenderer>()
        };
        _viewstack.AddChild(list);

        #endregion

        #region List 5 (horizontal)

        list = new List
        {
            Id     = "list5",
            Width  = 800,
            Height = 100,
            Layout = new HorizontalLayout {
                Gap = 0, RequestedColumnCount = 3
            },
            DataProvider = _dataProvider,
            SkinClass    = typeof(ListSkin2),
            ItemRenderer = new ItemRendererFactory <BigItemRenderer>()
        };
        _viewstack.AddChild(list);

        #endregion

        #region Process renderer click

        AddEventListener(BigItemRenderer.ADD_BUTTON_CLICKED, delegate(Event e)
        {
            IItemRenderer itemRenderer = (IItemRenderer)e.Target;
            Alert.Show("Info", itemRenderer.Data.ToString(), AlertButtonFlag.Ok,
                       new AlertOption(AlertOptionType.HeaderIcon, ImageLoader.Instance.Load("Icons/information")));
        });

        #endregion
    }
コード例 #21
0
ファイル: UnitTestMono.cs プロジェクト: cs-util-com/cscore
        public static IEnumerator RunTest <T>(ViewStack viewStack, string prefabName) where T : UnitTestMono
        {
            var ui = viewStack.ShowView(prefabName);

            yield return(RunTest <T>(ui));
        }
コード例 #22
0
 /// <summary>
 /// В зависимости от флага, либо закрывает предыдущее окно,
 /// либо делает видимым новое, но не затрагивает старое окно.
 /// </summary>
 /// <param name="window"></param>
 /// <param name="flag"></param>
 public static void OpenNewWindowInShow(Window window, bool flag)
 {
     Push(window, flag);
     ViewStack.ElementAt(0).ShowDialog();
 }