private static void OnFormRendererEvent( IFormRenderer <HTMLElement> sender, ToolbarSettings toolbarSettings) { var maybeTopMostPopup = sender.TopMostPopup; Logger.Debug(typeof(FormRendererExtensions), "OnFormRendererEvent master={0} popup={1}", sender.Master, maybeTopMostPopup); if (maybeTopMostPopup is IAugmentsToolbar) { ((IAugmentsToolbar)sender.TopMostPopup).OnAugmentToolbar(toolbarSettings); } else if (sender.Master is IAugmentsToolbar) { ((IAugmentsToolbar)sender.Master).OnAugmentToolbar(toolbarSettings); } //TODO optimization opportunity: store "former settings" and compare it against new ones to execute necessary calls only IawAppApi.SetToolbarColors(toolbarSettings.AppBarBackgroundColor, toolbarSettings.AppBarForegroundColor); IawAppApi.SetToolbarSearchState(toolbarSettings.SearchCallback); IawAppApi.SetToolbarItems(activated => { Logger.Debug(typeof(FormRendererExtensions), "OnMenuItemActivated raw menuItem {0}", activated); var maybeMenuItem = toolbarSettings.MenuItems.FirstOrDefault(x => x.Item1.webMenuItemId == activated.webMenuItemId); Logger.Debug(typeof(FormRendererExtensions), "OnMenuItemActivated found?={0}", maybeMenuItem != null); maybeMenuItem?.Item2(); }, toolbarSettings.MenuItems.Select(x => x.Item1)); IawAppApi.SetToolbarBackButtonState(toolbarSettings.BackActionVisible); }
public static void Run(IFormRenderer <HTMLElement> renderer) { var mainFrm = new MainForm(); var showInfo = new InformationalMessageForm("Some important info", "Info form title"); var altMainFrm = new AltMainForm(); renderer.ReplaceMaster(mainFrm); mainFrm.Ended += (form, outcome) => { switch (outcome) { case MainForm.Outcome.EndRequested: renderer.Remove(form); break; case MainForm.Outcome.InfoRequested: renderer.AddPopup(showInfo); break; case MainForm.Outcome.ReplaceMaster: renderer.ReplaceMaster(altMainFrm); break; } }; showInfo.Ended += (form, _) => renderer.Remove(form); //just dismiss this popup (no relevant outcome) }
public void Run(IFormRenderer <HTMLElement> renderer, Action atExit) { renderer.AddPopup(_input); _input.Ended += async(x, outcome) => { renderer.Remove(x); switch (outcome) { case IntroduceItemForm.Outcome.Saved: await _msg.Init($@" SomeNumber: {x.CreatedItem.SomeNumber} SomeText: {x.CreatedItem.SomeText} SomeBool: {x.CreatedItem.SomeBool} SomeTrait: enum={x.CreatedItem.SomeTrait.ToString()} int={x.CreatedItem.SomeTrait}", "This would be saved..."); renderer.AddPopup(_msg); break; case IntroduceItemForm.Outcome.Canceled: break; default: throw new Exception("unsupported outcome"); } }; _msg.Ended += (x, _) => { renderer.Remove(x); atExit(); }; }
public static BuiltPanels <T> BuiltHideable(T panel, IFormRenderer <HTMLElement> first, IFormRenderer <HTMLElement> second, ElementWrapperFormCanvas firstCanvas, ElementWrapperFormCanvas secondCanvas, Action hideAction, Action showAction) { return(new BuiltPanels <T>(panel, first, second, firstCanvas, secondCanvas, hideAction, showAction)); }
public void Run(IFormRenderer <HTMLElement> renderer, Action atExit) { var input = new AllFieldsFilledDataEntryForm(); var tryAgain = new ConfirmMessageForm( "Try again?", "Input done", TextType.TreatAsText, ConfirmLabels.YesNo); input.Ended.Add(x => { renderer.Remove(input); renderer.AddPopup(tryAgain); }); tryAgain.Ended += (x, outcome) => { switch (outcome) { case CompletedOrCanceled.Completed: renderer.Remove(x); renderer.AddPopup(input); break; case CompletedOrCanceled.Canceled: renderer.Remove(x); atExit(); break; default: throw new Exception("unsupported outcome"); } }; renderer.AddPopup(input); }
public void Run(IFormRenderer <HTMLElement> renderer, Action atExit) { var panel = TwoPanelsWithResizerBuilder.BuildHorizontal( Hideability.First, true, renderer, SpacingPolicy.FirstWins); _onExit = () => { renderer.ClearMaster(); atExit(); }; panel.FirstCanvas.LayoutMode = LayoutModeType.TitleExtra_Actions_Body; panel.First.ReplaceMaster(_menu); panel.SecondCanvas.LayoutMode = LayoutModeType.ExtraTitle_Body_Actions; panel.Second.ReplaceMaster(_content); renderer.ReplaceMasterWithAdapter(panel.Panel); _content.Ended += (x, outcome) => { switch (outcome) { case FlexibleLayoutContentForm.Outcome.LeftPanelLayoutChanged: panel.FirstCanvas.LayoutMode = x.CurrentLayoutMode; break; default: throw new Exception("unsupported outcome"); } }; }
public void Run(IFormRenderer <HTMLElement> renderer, Action atExit) { renderer.AddPopup(_simplest); _simplest.Ended += (x, _) => { renderer.Remove(x); atExit(); }; }
public void Run(IFormRenderer <HTMLElement> renderer, Action atExit) { renderer.AddPopup(_msg); _msg.Ended += (x, unit) => { renderer.Remove(x); atExit(); }; }
public void Run(IFormRenderer <HTMLElement> renderer, Action atExit) { renderer.AddPopup(_choose); _choose.Ended += async(x, outcome) => { switch (outcome) { case CompletedOrCanceled.Canceled: renderer.Remove(x); atExit(); break; case CompletedOrCanceled.Completed: renderer.Remove(x); if (_choose.ChosenValue == SupportedLang.EN) { await InitWelcomeDialog(); renderer.AddPopup(_welcomeDialog); //go directly to dialog } else { renderer.AddPopup(_downloadTranslation); } break; default: throw new Exception("unsupported outcome"); } }; _downloadTranslation.Ended += async(x, outcome) => { switch (outcome) { case RemoteActionsCallerForm.Outcome.Canceled: case RemoteActionsCallerForm.Outcome.Interrupted: renderer.Remove(x); break; case RemoteActionsCallerForm.Outcome.Succeeded: renderer.Remove(x); await InitWelcomeDialog(); renderer.AddPopup(_welcomeDialog); break; default: throw new Exception("unsupported outcome"); } }; _welcomeDialog.Ended += (x, unit) => renderer.Remove(x); }
private static BuiltPanels <T> BuildNonhideable <T>(T panels, IFormRenderer <HTMLElement> renderer) where T : TwoPanelsWithResizer { var leftCanvas = new ElementWrapperFormCanvas( Toolkit.BaseFormCanvasTitleStrategy, panels.FirstPanel, Toolkit.DefaultExitButtonBuilder, Toolkit.DefaultLayoutMode); var leftRenderer = renderer.CreateRendererWithBase(leftCanvas); var rightCanvas = new ElementWrapperFormCanvas( Toolkit.BaseFormCanvasTitleStrategy, panels.SecondPanel, Toolkit.DefaultExitButtonBuilder, Toolkit.DefaultLayoutMode); var rightRenderer = renderer.CreateRendererWithBase(rightCanvas); return(BuiltPanels <T> .BuiltNonHideable(panels, leftRenderer, rightRenderer, leftCanvas, rightCanvas)); }
private BuiltPanels(T panel, IFormRenderer <HTMLElement> first, IFormRenderer <HTMLElement> second, ElementWrapperFormCanvas firstCanvas, ElementWrapperFormCanvas secondCanvas, Action hideAction, Action showAction) { Panel = panel; First = first; Second = second; FirstCanvas = firstCanvas; SecondCanvas = secondCanvas; HideAction = hideAction; ShowAction = showAction; }
public void Run(IFormRenderer <HTMLElement> renderer, Action atExit) { if (_skipWelcome) { atExit(); return; } renderer.AddPopup(_introduction); //what to do when _introduction form wants to quit? _introduction.Ended += (x, unit) => { renderer.Remove(x); //user wanted to quit so we allow it atExit(); //as this is exit step from this simplistic IFlow }; }
public void Run(IFormRenderer <HTMLElement> renderer, Action atExit) { _askForName.Ended += async(x, outcome) => { renderer.Remove(x); switch (outcome) { case CompletedOrCanceled.Completed: renderer.AddPopup(_getAnswer); break; case CompletedOrCanceled.Canceled: await _sayHello.Init("You didn't provide name thus server won't be called"); renderer.AddPopup(_sayHello); break; } }; _getAnswer.Ended += async(x, outcome) => { switch (outcome) { case RemoteActionsCallerForm.Outcome.Succeeded: break; //message is already prepared case RemoteActionsCallerForm.Outcome.Canceled: await _sayHello.Init("Looks like request was canceled"); break; case RemoteActionsCallerForm.Outcome.Interrupted: await _sayHello.Init("Looks like request failed"); break; } renderer.Remove(x); renderer.AddPopup(_sayHello); }; _sayHello.Ended += (x, unit) => { renderer.Remove(x); renderer.AddPopup(_askForName); }; renderer.AddPopup(_askForName); }
public void Run(IFormRenderer <HTMLElement> renderer, Action atExit) { renderer.AddPopup(_fetchFiles); _fetchFiles.Ended += (x, outcome) => { switch (outcome) { case RemoteActionsCallerForm.Outcome.Succeeded: renderer.Remove(x); renderer.AddPopup(_params); break; case RemoteActionsCallerForm.Outcome.Canceled: case RemoteActionsCallerForm.Outcome.Interrupted: renderer.Remove(x); atExit(); break; default: throw new Exception("unsupported outcome"); } }; _params.Ended += async(x, outcome) => { switch (outcome) { case CompletedOrCanceled.Canceled: renderer.Remove(x); atExit(); break; case CompletedOrCanceled.Completed: await _demo.InitFiles(_files); renderer.Remove(x); renderer.AddPopup(_demo); break; default: throw new Exception("unsupported outcome"); } }; _demo.Ended += (x, _) => { renderer.Remove(x); atExit(); }; }
public void Run(IFormRenderer <HTMLElement> renderer, Action atExit) { var panels = TwoPanelsWithResizerBuilder.BuildHorizontal( Hideability.None, false, renderer, Tuple.Create((int?)522, (int?)null)); panels.First.ReplaceMaster(_sender); panels.FirstCanvas.LayoutMode = LayoutModeType.TitleExtra_Actions_Body; panels.Second.ReplaceMaster(_listener); panels.SecondCanvas.LayoutMode = LayoutModeType.TitleExtra_Actions_Body; renderer.ReplaceMasterWithAdapter(panels.Panel); _sender.Ended += (x, outcome) => { renderer.ClearMaster(); atExit(); }; }
private static BuiltPanels <T> Builder <T>( T prototype, Hideability hideable, bool showable, IFormRenderer <HTMLElement> renderer) where T : TwoPanelsWithResizer { switch (hideable) { case Hideability.None: return(BuildNonhideable(prototype, renderer)); case Hideability.First: case Hideability.Second: return(BuildHideable( prototype, hideable == Hideability.First, showable, renderer)); default: throw new Exception("unsupported Hideability"); } }
public void Run(IFormRenderer <HTMLElement> renderer, Action atExit) { renderer.AddPopup(_dataEntry); _dataEntry.Ended += async(x, outcome) => { Logger.Debug(GetType(), "_dataEntry ended with outcome {0}", outcome); renderer.Remove(x); switch (outcome) { case SomeChoicesForm.Outcome.Canceled: await _msg.Init("You've canceled form"); break; case SomeChoicesForm.Outcome.FirstChoice: await _msg.Init("You've picked first choice"); break; case SomeChoicesForm.Outcome.SecondChoice: await _msg.Init("You've picked second choice"); break; default: throw new Exception("unsupported outcome"); } renderer.AddPopup(_msg); }; _msg.Ended += (x, unit) => { Logger.Debug(GetType(), "_msg ended with outcome {0}", unit); renderer.Remove(x); atExit(); }; }
public void Run(IFormRenderer <HTMLElement> renderer, Action atExit) { //here would be inter-form navigational logic... }
public void Run(IFormRenderer <HTMLElement> renderer, Action atExit) { renderer.ReplaceMaster(_datagrid); renderer.AddPopup(_fetchData); _fetchData.Ended += (x, outcome) => { renderer.Remove(x); switch (outcome) { case RemoteActionsCallerForm.Outcome.Succeeded: break; case RemoteActionsCallerForm.Outcome.Interrupted: case RemoteActionsCallerForm.Outcome.Canceled: renderer.Remove(_datagrid); break; default: throw new Exception("outcome not supported"); } }; _datagrid.Ended += async(x, outcome) => { switch (outcome) { case DataboundDatagridForm.Outcome.Canceled: renderer.Remove(x); atExit(); break; case DataboundDatagridForm.Outcome.ReloadData: renderer.AddPopup(_fetchData); break; case DataboundDatagridForm.Outcome.CreateItemDemanded: renderer.AddPopup(_itemCreator); break; case DataboundDatagridForm.Outcome.EditItemDemanded: await _itemEditor.InitializeFrom(_datagrid.Items.Selected[0]); renderer.AddPopup(_itemEditor); break; default: throw new Exception("outcome not supported"); } }; _itemCreator.Ended += (x, outcome) => { renderer.Remove(x); switch (outcome) { case DataboundDatagridItemCreatorForm.Outcome.Canceled: break; case DataboundDatagridItemCreatorForm.Outcome.Created: _datagrid.Items.Items.InsertAt(0, _itemCreator.CreatedItem); break; default: throw new Exception("outcome not supported"); } }; _itemEditor.Ended += (x, _) => { renderer.Remove(x); }; }
public void Run(IFormRenderer <HTMLElement> renderer, Action atExit) { _baseRenderer = renderer; renderer.AddPopup(_fetchUser); _mainMenuForm.Ended += (x, _) => renderer.AddPopup(_logoutConfirm); _logoutConfirm.Ended += (x, outcome) => { switch (outcome) { case CompletedOrCanceled.Completed: renderer.Remove(x); renderer.AddPopup(_runLogout); break; case CompletedOrCanceled.Canceled: renderer.Remove(x); break; default: throw new Exception("unsupported outcome"); } }; _fetchUser.Ended += (x, outcome) => { switch (outcome) { case RemoteActionsCallerForm.Outcome.Succeeded: renderer.Remove(x); if (_currentUserOrNull == null) { renderer.AddPopup(_loginForm); break; } //user is logged in -> continue PopulateMenuItems(); renderer.ReplaceMaster(_mainMenuForm); atExit(); break; case RemoteActionsCallerForm.Outcome.Interrupted: case RemoteActionsCallerForm.Outcome.Canceled: break; default: throw new Exception("unsupported outcome"); } }; _loginForm.Ended += async(x, outcome) => { switch (outcome) { case CompletedOrCanceled.Completed: renderer.Remove(x); //user is logged in -> continue PopulateMenuItems(); renderer.ReplaceMaster(_mainMenuForm); atExit(); break; case CompletedOrCanceled.Canceled: await _authProblemMsg.Init( _loginForm.ErrorMessageOrNull); renderer.AddPopup(_authProblemMsg); break; default: throw new Exception("unsupported outcome"); } }; _runLogout.Ended += (x, outcome) => { switch (outcome) { case RemoteActionsCallerForm.Outcome.Canceled: case RemoteActionsCallerForm.Outcome.Interrupted: renderer.Remove(x); break; case RemoteActionsCallerForm.Outcome.Succeeded: renderer.Remove(x); renderer.Remove(_mainMenuForm); renderer.AddPopup(_loginForm); break; default: throw new Exception("unsupported outcome"); } }; _authProblemMsg.Ended += (x, unit) => renderer.Remove(x); }
/// <param name="whichOne">true = first, false=second</param> private static BuiltPanels <T> BuildHideable <T>( T panels, bool whichOne, bool showable, IFormRenderer <HTMLElement> renderer) where T : TwoPanelsWithResizer { var fstIsHideable = whichOne; var toBeHidden = fstIsHideable ? panels.FirstPanel : panels.SecondPanel; var hideAct = new HTMLDivElement { TextContent = FontAwesomeSolid.IconTimes } .With(x => x.AddClasses( Magics.CssClassHideAction, Magics.CssClassEnabled, IconFontType.FontAwesomeSolid.ToCssClassName())); var showAct = showable ? new HTMLDivElement { TextContent = FontAwesomeSolid.IconBars } .With(x => x.AddClasses( Magics.CssClassShowAction, IconFontType.FontAwesomeSolid.ToCssClassName())) : null; panels.FirstPanel.AddClasses(Magics.CssClassPositionRelative); var leftCanvas = new ElementWrapperFormCanvas( Toolkit.BaseFormCanvasTitleStrategy, panels.FirstPanel, Toolkit.DefaultExitButtonBuilder, Toolkit.DefaultLayoutMode, fstIsHideable ? hideAct : showAct); var leftRenderer = renderer.CreateRendererWithBase(leftCanvas); panels.SecondPanel.AddClasses(Magics.CssClassPositionRelative); var rightCanvas = new ElementWrapperFormCanvas( Toolkit.BaseFormCanvasTitleStrategy, panels.SecondPanel, Toolkit.DefaultExitButtonBuilder, Toolkit.DefaultLayoutMode, fstIsHideable ? showAct : hideAct); var rightRenderer = renderer.CreateRendererWithBase(rightCanvas); var lastSize = new MutableHolder <Tuple <double, double> >(); var shown = new MutableHolder <bool>(true); void HideAction() { if (!shown.Value) { Logger.Debug(typeof(TwoPanelsWithResizerBuilder), "already hidden"); return; } hideAct.RemoveClasses(Magics.CssClassEnabled); if (showable) { showAct.AddClasses(Magics.CssClassEnabled); } lastSize.Value = panels.Sizes; toBeHidden.AddClasses(Magics.CssClassNotRendered); panels.Splitter.AddClasses(Magics.CssClassNotRendered); shown.Value = false; panels.ForceSizeCalculation(VisibilityAction.Hiding); } void ShowAction() { if (shown.Value) { Logger.Debug(typeof(TwoPanelsWithResizerBuilder), "already shown"); return; } if (showable) { showAct.RemoveClasses(Magics.CssClassEnabled); } hideAct.AddClasses(Magics.CssClassEnabled); toBeHidden.RemoveClasses(Magics.CssClassNotRendered); panels.Splitter.RemoveClasses(Magics.CssClassNotRendered); shown.Value = true; panels.ForceSizeCalculation(VisibilityAction.Showing, lastSize.Value); } hideAct.OnClick += ev => HideAction(); if (showable) { showAct.OnClick += ev => ShowAction(); } return(BuiltPanels <T> .BuiltHideable(panels, leftRenderer, rightRenderer, leftCanvas, rightCanvas, HideAction, ShowAction)); }
public FormShortcodeRenderer(ISession session, IFormRenderer formRenderer) { _session = session; _formRenderer = formRenderer; }
public ObservingRenderer(IFormRenderer <HTMLElement> adapted, OnFormRendererEvent callback) { _adapted = adapted; _callback = callback; }
public static IFormRenderer <HTMLElement> Observe(this IFormRenderer <HTMLElement> self, OnFormRendererEvent callback) => new ObservingRenderer(self, callback);
public static IFormRenderer <HTMLElement> Observe(this IFormRenderer <HTMLElement> self, Func <IFormRenderer <HTMLElement>, ToolbarSettings> callback) => new ObservingRenderer(self, (sender, _, __) => OnFormRendererEvent(sender, callback(sender)));
public void Run(IFormRenderer <HTMLElement> renderer, Action atExit) { renderer.ReplaceMaster(_mainMenuForm); _baseRenderer = renderer; }
public MainMenuFlow(ISomeService someService, ITranslationsService translationsService, IHttpRequester httpRequester) { IFormRenderer <HTMLElement> CreateRenderer() => _baseRenderer.CreateRendererWithBase( new ElementWrapperFormCanvas( Toolkit.BaseFormCanvasTitleStrategy, _mainMenuFormView.BodyPanel.Widget, Toolkit.DefaultExitButtonBuilder, Toolkit.DefaultLayoutMode)); _aboutMsg = new InformationalMessageForm( new InformationalMessageFormView(TextType.TreatAsHtml), "<b>Philadelphia Toolkit Demo</b><br>by TODO IT spółka z o.o.", "About program"); _aboutMsg.Ended += (x, _) => _lastRenderer.Remove(x); _licensesInfoMsg = new InformationalMessageForm( new InformationalMessageFormView(TextType.TreatAsHtml), OpenSourceLicensesText.OpenSourceLicensesHtml, I18n.Translate("Used open source licensed programs and libraries")); _licensesInfoMsg.Ended += (x, _) => _lastRenderer.Remove(x); var menuItems = new List <MenuItemUserModel> { CreateSubTree("Features", CreateLocalLeaf( "Server-sent events", () => new SseDemoFlow(someService).Run(CreateRenderer())), CreateLocalLeaf( "Forms navigation", () => new NavigationProgram().Run(CreateRenderer())), CreateLocalLeaf( "Internationalization", () => new InternationalizationFlow(translationsService).Run(CreateRenderer()))), CreateSubTree("Data validation", CreateLocalLeaf( "Simplest", () => new ValidationProgram().Run(CreateRenderer())), CreateLocalLeaf( "Tabbed view indicator", () => new TabbedViewValidationFlow().Run(CreateRenderer())), CreateLocalLeaf( "File uploads", () => new UploaderDemoFlow(someService, httpRequester).Run(CreateRenderer()))), CreateSubTree("Widgets", CreateLocalLeaf( "Databound datagrid", () => new DataboundDatagridProgram(someService).Run(CreateRenderer())), CreateLocalLeaf( "Datetime pickers", () => new DateTimeDemoProgram().Run(CreateRenderer())), CreateLocalLeaf( "Dropdowns", () => new DropdownsProgram().Run(CreateRenderer())), CreateLocalLeaf( "Master details", () => new MasterDetailsProgram(someService).Run(CreateRenderer())), CreateLocalLeaf( "Flexible layout", () => new FlexibleLayoutFlow().Run(CreateRenderer()))), CreateSubTree("Help", CreateLocalLeaf( "About program", () => { _lastRenderer = CreateRenderer(); _lastRenderer.AddPopup(_aboutMsg); }), CreateLocalLeaf( "Open source licenses", () => { _lastRenderer = CreateRenderer(); _lastRenderer.AddPopup(_licensesInfoMsg); }) ) }; //TODO dropdown with not-legal-anymore/scratched value //TODO add I18n demo _mainMenuFormView = new HorizontalLinksMenuFormView(); _mainMenuForm = new MenuForm(_mainMenuFormView, menuItems); }
public static void Run <T>(this IFlow <T> flow, IFormRenderer <T> renderer) => flow.Run(renderer, LambdaUtil.DoNothingAction);
public FormShortcodeParser(IDocumentService documentService, IFormRenderer formRenderer) { _documentService = documentService; _formRenderer = formRenderer; }
public static BuiltPanels <T> BuiltNonHideable(T panel, IFormRenderer <HTMLElement> first, IFormRenderer <HTMLElement> second, ElementWrapperFormCanvas firstCanvas, ElementWrapperFormCanvas secondCanvas) { return(new BuiltPanels <T>(panel, first, second, firstCanvas, secondCanvas, null, null)); }
public FormShortcodeParser(IDocumentService documentService, IFormRenderer formRenderer) { _documentService = documentService; _formRenderer = formRenderer; }