Пример #1
0
        private bool CanGoToStep(Step step)
        {
            if (step == null)
            {
                return(false);
            }

            if (myTour.EnableNextButtonAlways)
            {
                return(true);
            }

            // step entering is usually used to create a state where the visual element is available.
            if (FeatureTour.HasStepEnteringAttached(step))
            {
                return(true);
            }

            var visualElement = myVisualElementManager.GetVisualElement(step.ElementID, true);

            if (visualElement == null || visualElement.WindowID != myCurrentWindowID)
            {
                return(false);
            }

            return(true);
        }
        public MainWindow()
        {
            InitializeComponent();

            DataContext = MainWindowViewModel.Instance;

            myTbResult.TextChanged       += TbResultTextChanged;
            myTbPath.TextChanged         += TbPathTextChanged;
            myCbOptions.SelectionChanged += CbOptionsSelectionChanged;

            var navigator = FeatureTour.GetNavigator();

            navigator.OnStepEntering(ElementID.Rectangle).Execute(s =>
            {
                (DataContext as MainWindowViewModel).Placement = (Placement)s.Tag;
                TabControl.SelectedIndex = 0;
            });
            navigator.OnStepEntering(ElementID.TextBoxResult).Execute(s => TabControl.SelectedIndex = 1);
            navigator.OnStepEntering(ElementID.ButtonPushMe).Execute(s => TabControl.SelectedIndex  = 2);
            navigator.OnStepEntering(ElementID.CustomView).Execute(s => TabControl.SelectedIndex    = 3);

            navigator.OnStepEntered(ElementID.TextBoxResult).Execute(s => myTbResult.Focus());
            navigator.OnStepEntered(ElementID.TextBoxPath).Execute(s => myTbPath.Focus());
            navigator.OnStepEntered(ElementID.ComboBoxOption).Execute(s => myCbOptions.Focus());
            navigator.OnStepEntered(ElementID.ButtonClear).Execute(s => myBtnClear.Focus());
        }
 private void CbOptionsSelectionChanged(object sender, SelectionChangedEventArgs e)
 {
     if (myCbOptions.SelectedIndex == 1)
     {
         var navigator = FeatureTour.GetNavigator();
         navigator.IfCurrentStepEquals(ElementID.ComboBoxOption).GoNext();
     }
 }
        // Methods

        private void Clear()
        {
            Result        = "";
            Path          = "";
            SelectedIndex = 0;
            FeatureTour.GetNavigator()
            .IfCurrentStepEquals(ElementID.ButtonClear)
            .Close();
        }
Пример #5
0
        /// <summary>
        /// Handle special Feature Tour Navigation events
        /// </summary>
        private void InitFeatureTourNavigation()
        {
            var navigator = FeatureTour.GetNavigator();

            navigator.OnStepEntering(FeatureTourElementID.AccountViewButtonSaveHardwareSettings).Execute(s => DataContext = AccountViewModel);
            navigator.OnStepEntering(FeatureTourElementID.AccountViewTextBoxAccountID).Execute(s => DataContext           = AccountViewModel);
            navigator.OnStepEntering(FeatureTourElementID.AccountViewTextBoxWorkerName).Execute(s => DataContext          = AccountViewModel);
            navigator.OnStepEntering(FeatureTourElementID.WalletViewDataGridWalletAddresses).Execute(s => DataContext     = WalletViewModel);
        }
Пример #6
0
        public void Close()
        {
            myPopupNavigator.ExitTour();
            myWindowManager.WindowActivated   -= WindowActivated;
            myWindowManager.WindowDeactivated -= WindowDeactivated;

            FeatureTour.OnStepLeaved(myCurrentStepNode.Step);
            FeatureTour.OnClosed(myCurrentStepNode.Step);
            FeatureTour.SetCurrentRunNull();
        }
        private void TbResultTextChanged(object sender, TextChangedEventArgs e)
        {
            var result = myTbResult.Text.Trim();

            if (result == "21")
            {
                var navigator = FeatureTour.GetNavigator();
                navigator.IfCurrentStepEquals(ElementID.TextBoxResult).GoNext();
            }
        }
        private void TbPathTextChanged(object sender, TextChangedEventArgs e)
        {
            var path         = myTbPath.Text.Trim(' ', '\\');
            var expectedPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop).Trim(' ', '\\');

            if (path.Equals(expectedPath, StringComparison.InvariantCultureIgnoreCase))
            {
                var navigator = FeatureTour.GetNavigator();
                navigator.IfCurrentStepEquals(ElementID.TextBoxPath).GoNext();
            }
        }
        // .ctor

        private MainWindowViewModel()
        {
            var navigator = FeatureTour.GetNavigator();

            navigator.ForStep(ElementID.TextBoxPath).AttachDoable(s => Path             = Environment.GetFolderPath(Environment.SpecialFolder.Desktop));
            navigator.ForStep(ElementID.ComboBoxOption).AttachDoable(s => SelectedIndex = 1);
            navigator.ForStep(ElementID.TextBoxPath).AttachDoable(s => Path             = Environment.GetFolderPath(Environment.SpecialFolder.Desktop));

            PopupStyle.PropertyChanged += (s, e) => StyleText = GetStyleText();
            StyleText = GetStyleText();
        }
        public void TestStepCount()
        {
            var tour = new Tour();

            tour.Steps = new[]
            {
                new Step("1", "Header1", "Content1", "ID1"),
                new Step("2", "Header2", "Content2", "ID2"),
                new Step("3", "Header2", "Content2", "ID2"),
            };

            var manager = new VisualElementManagerMock(tour.Steps);
            var tourRun = new TourRun(tour, manager, new WindowManagerMock(), new PopupNavigatorMock());

            FeatureTour.SetTourRun(tourRun);
            tourRun.Start();

            var vm = tourRun.GetPrivateField <TourViewModel>("myTourViewModel");

            Assert.AreEqual(false, vm.HasTourFinished);
            Assert.AreEqual(3, vm.TotalStepsCount);
            Assert.AreEqual(1, vm.CurrentStepNo);

            tourRun.NextStep();

            Assert.AreEqual(false, vm.HasTourFinished);
            Assert.AreEqual(3, vm.TotalStepsCount);
            Assert.AreEqual(2, vm.CurrentStepNo);

            tourRun.NextStep();

            Assert.AreEqual(true, vm.HasTourFinished);
            Assert.AreEqual(3, vm.TotalStepsCount);
            Assert.AreEqual(3, vm.CurrentStepNo);

            tourRun.NextStep();

            Assert.AreEqual(true, vm.HasTourFinished);
            Assert.AreEqual(3, vm.TotalStepsCount);
            Assert.AreEqual(3, vm.CurrentStepNo);

            tourRun.PreviousStep();

            Assert.AreEqual(false, vm.HasTourFinished);
            Assert.AreEqual(3, vm.TotalStepsCount);
            Assert.AreEqual(2, vm.CurrentStepNo);

            FeatureTour.SetCurrentRunNull();
        }
Пример #11
0
        private bool SetStep(StepNode nextStep, bool includeUnloaded = false)
        {
            if (nextStep == null)
            {
                Log.Debug("SetStep: nextStep is null");
                return(false);
            }
            Log.Debug("SetStep: '" + nextStep.Step.ID + "'");

            if (myCurrentStepNode != nextStep)
            {
                FeatureTour.OnStepLeaved(myCurrentStepNode.Step);
                myCurrentStepNode = nextStep;
            }
            var step = myCurrentStepNode.Step;

            FeatureTour.OnStepEntering(step);

            var app = Application.Current;

            VisualElement element;

            if (app == null)
            {
                element = myVisualElementManager.GetVisualElement(step.ElementID, includeUnloaded);
            }
            else
            {
                element = app.Dispatcher.Invoke(DispatcherPriority.ApplicationIdle, new Func <object>(() => myVisualElementManager.GetVisualElement(step.ElementID, includeUnloaded))) as VisualElement;
            }
            if (element == null)
            {
                LogWarningCouldNotFindElementFor(step);
                return(false);
            }

            using (myPopupNavigator.MovePopupTo(element))
            {
                InitializeViewModel(step, element);

                // required to ensure that the view is updated before the popup is shown
                // otherwise the update is visible in the popup (which looks ugly)
                Dispatcher.CurrentDispatcher.Invoke(DispatcherPriority.Background, new Action(() => { }));

                FeatureTour.OnStepEntered(step);
            }

            return(true);
        }
        public void OnStepDoable()
        {
            var d         = new Doable();
            var navigator = FeatureTour.GetNavigator();

            navigator.ForStep("ID1").AttachDoable(s => d.do1++);
            navigator.ForStep("ID2").AttachDoable(s => d.do2++, s => true);
            navigator.ForStep("ID3").AttachDoable(s => d.do3++, s => false);

            var tour = new Tour();

            tour.Steps = new[]
            {
                new Step("1", "Header1", "Content1", "ID1"),
                new Step("2", "Header2", "Content2", "ID2"),
                new Step("3", "Header3", "Content3", "ID3"),
                new Step("4", "Header4", "Content4", "ID4"),
            };

            var manager = new VisualElementManagerMock(tour.Steps);
            var tourRun = new TourRun(tour, manager, new WindowManagerMock(), new PopupNavigatorMock());

            tourRun.Start();

            AssertIsDoable(d, 0, 0, 0);
            Assert.IsTrue(tourRun.ShowDoIt());
            Assert.IsTrue(tourRun.CanDoIt());
            tourRun.DoIt();
            AssertIsDoable(d, 1, 0, 0);

            tourRun.NextStep();
            Assert.IsTrue(tourRun.ShowDoIt());
            Assert.IsTrue(tourRun.CanDoIt());
            tourRun.DoIt();
            AssertIsDoable(d, 1, 1, 0);

            tourRun.NextStep();
            Assert.IsTrue(tourRun.ShowDoIt());
            Assert.IsFalse(tourRun.CanDoIt());
            tourRun.DoIt();
            AssertIsDoable(d, 1, 1, 1);

            tourRun.NextStep();
            Assert.IsFalse(tourRun.ShowDoIt());
            Assert.IsFalse(tourRun.CanDoIt());
            tourRun.DoIt();
            AssertIsDoable(d, 1, 1, 1);
        }
Пример #13
0
        public void TestCompleteRun_2Steps_UsingNavigator()
        {
            var navigator = FeatureTour.GetNavigator();
            var tour      = new Tour();

            tour.Steps = new[]
            {
                new Step("1", "Header1", "Content1"),
                new Step("2", "Header2", "Content2"),
            };

            var manager        = new VisualElementManagerMock(tour.Steps);
            var windowManager  = new WindowManagerMock();
            var popupNavigator = new PopupNavigatorMock();
            var tourRun        = new TourRun(tour, manager, windowManager, popupNavigator);

            FeatureTour.SetTourRun(tourRun);
            tourRun.Start();

            Assert.AreEqual(tour.Steps[0], FeatureTour.CurrentStep);

            Assert.IsTrue(navigator.IfCurrentStepEquals(FeatureTour.CurrentStep.ID).GoNext());
            Assert.AreEqual(tour.Steps[1], FeatureTour.CurrentStep);

            Assert.IsFalse(navigator.IfCurrentStepEquals(FeatureTour.CurrentStep.ID).GoNext());
            Assert.AreEqual(tour.Steps[1], FeatureTour.CurrentStep);

            Assert.IsTrue(navigator.IfCurrentStepEquals(FeatureTour.CurrentStep.ID).GoPrevious());
            Assert.AreEqual(tour.Steps[0], FeatureTour.CurrentStep);

            Assert.IsFalse(navigator.IfCurrentStepEquals(FeatureTour.CurrentStep.ID).GoPrevious());
            Assert.AreEqual(tour.Steps[0], FeatureTour.CurrentStep);

            Assert.IsTrue(navigator.Close());
            Assert.AreEqual(null, FeatureTour.CurrentStep);

            AssertManagerIsClean(popupNavigator, windowManager);

            FeatureTour.SetCurrentRunNull();
        }
Пример #14
0
        /// <summary>
        /// Starts the tour.
        /// </summary>
        public void Start()
        {
            Log.Debug("Starting tour: " + (Name ?? "<null>"));
            var run = new TourRun(this,
                                  TourHelper.VisualElementManager,
                                  TourHelper.WindowManager,
                                  TourHelper.PopupNavigator);

            try
            {
                FeatureTour.SetTourRun(run);
                run.Start();
            }
            catch (LicenseException licEx)
            {
                MessageBox.Show("Your copy of FeatureTour is not licensed: " + licEx.Message, "FeatureTour not licensed", MessageBoxButton.OK, MessageBoxImage.Warning);
            }
            catch (Exception ex)
            {
                Log.Error("Tour.Start: Unhandled Exception.", ex);
            }
        }
        public void OnStepEnteredLeavedClosed()
        {
            var c         = new Counter();
            var navigator = FeatureTour.GetNavigator();

            navigator.OnStepEntered("ID1").Execute(s => c.entered1++);
            navigator.OnStepEntered("ID2").Execute(s => c.entered2++);
            navigator.OnStepLeft("ID1").Execute(s => c.leaved1++);
            navigator.OnStepLeft("ID2").Execute(s => c.leaved2++);
            navigator.OnClosed().Execute(s => c.closed++);

            var tour = new Tour();

            tour.Steps = new[]
            {
                new Step("1", "Header1", "Content1", "ID1"),
                new Step("2", "Header2", "Content2", "ID2"),
            };

            var manager = new VisualElementManagerMock(tour.Steps);
            var tourRun = new TourRun(tour, manager, new WindowManagerMock(), new PopupNavigatorMock());

            AssertIsCounter(c, 0, 0, 0, 0, 0);
            FeatureTour.SetTourRun(tourRun);
            AssertIsCounter(c, 0, 0, 0, 0, 0);
            tourRun.Start();
            AssertIsCounter(c, 1, 0, 0, 0, 0);
            tourRun.NextStep();
            AssertIsCounter(c, 1, 1, 1, 0, 0);
            tourRun.PreviousStep();
            AssertIsCounter(c, 2, 1, 1, 1, 0);
            tourRun.Close();
            AssertIsCounter(c, 2, 2, 1, 1, 1);

            FeatureTour.SetCurrentRunNull();
        }
Пример #16
0
 public void DoIt()
 {
     FeatureTour.Do(myCurrentStepNode.Step);
 }
Пример #17
0
        private void ButtonMeToOnClick(object sender, RoutedEventArgs e)
        {
            var tour = FeatureTour.GetNavigator();

            tour.IfCurrentStepEquals(ElementID.ButtonPushMeToo).GoNext();
        }
Пример #18
0
 public bool ShowDoIt()
 {
     return(FeatureTour.HasDoableAttached(myCurrentStepNode.Step));
 }
Пример #19
0
 public bool CanDoIt()
 {
     return(FeatureTour.CanDo(myCurrentStepNode.Step));
 }