using CefSharp; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Tango.Core.Commands; using Tango.PPC.Browser.Navigation; using Tango.PPC.Browser.ViewContracts; using Tango.PPC.Common; using Tango.PPC.Common.Navigation; using Tango.Touch.Keyboard; namespace Tango.PPC.Browser.ViewModels { /// /// Represents the main view VM and entry point for . /// /// public class BrowserViewVM : PPCViewModel, INavigationObjectReceiver { private bool _isFromObject; private String _address; public String Address { get { return _address; } set { _address = value; RaisePropertyChangedAuto(); } } private bool _displayAddressBar; public bool DisplayAddressBar { get { return _displayAddressBar; } set { _displayAddressBar = value; RaisePropertyChangedAuto(); } } public RelayCommand GoCommand { get; set; } public BrowserViewVM() { DisplayAddressBar = true; GoCommand = new RelayCommand(Go); } public override void OnViewAttached() { base.OnViewAttached(); View.AddressChanged += View_AddressChanged; } private void View_AddressChanged(object sender, string address) { Address = address; } public override void OnNavigatedTo() { base.OnNavigatedTo(); KeyboardView.Default.OutputMode = KeyboardOutputMode.Windows; if (!_isFromObject) { DisplayAddressBar = true; } _isFromObject = false; } public override void OnNavigatedFrom() { base.OnNavigatedFrom(); KeyboardView.Default.OutputMode = KeyboardOutputMode.Wpf; } public override Task OnNavigateBackRequest() { if (View != null && View.CanGoBack()) { View.GoBack(); return Task.FromResult(false); } else { return Task.FromResult(true); } } /// /// Called when the application has been started /// public override void OnApplicationStarted() { } public override void OnApplicationShuttingDown() { base.OnApplicationShuttingDown(); try { Cef.Shutdown(); } catch (Exception ex) { LogManager.Log(ex, "Error shutting down cef."); } } private void Go() { if (View != null) { View.NavigateTo(Address); } } public void OnNavigatedToWithObject(BrowserNavigationRequest obj) { _isFromObject = true; DisplayAddressBar = obj.DisplayAddressBar; if (obj.Address != null) { Address = obj.Address; Go(); } } } }