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); } }
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()); }
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); }
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); }
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); }
/// <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); }
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); }
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(); } } }
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); }
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()); } }
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); } }
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); }
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; } }; }
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); }
/// <summary> /// Удаление предыдущего окна из стека. /// </summary> public static void Pop() { ViewStack.Pop(); }
/// <summary> /// Возвращает экземпляр текущего окна. /// </summary> /// <returns></returns> public static Window GetView() { return(ViewStack.ElementAt(0)); }
/// <summary> /// Закрывает окно, с которым ведется работа. /// </summary> public static void CloseView() { Close(ViewStack.ElementAt(0)); Pop(); }
/// <summary> /// Открывает новое окно, закрывая предыдущее. /// </summary> /// <param name="window"></param> public static void OpenNewWindowInShowDialog(Window window) { Push(window, true); ViewStack.ElementAt(0).ShowDialog(); }
public static IEnumerator RunTest <T>(string prefabName) where T : UnitTestMono { ViewStack viewStack = ViewStackHelper.MainViewStack(); yield return(RunTest <T>(viewStack, prefabName)); }
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 }
public static IEnumerator RunTest <T>(ViewStack viewStack, string prefabName) where T : UnitTestMono { var ui = viewStack.ShowView(prefabName); yield return(RunTest <T>(ui)); }
/// <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(); }