aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/LoadingViewVM.cs
blob: 283ea363751fae78dc8b7d8c60e693a24890de28 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using Tango.Core.Helpers;
using Tango.BL.Entities;
using Tango.Logging;
using Tango.MachineStudio.Common.Modules;
using Tango.MachineStudio.Common.Navigation;
using Tango.MachineStudio.Common.Notifications;
using Tango.MachineStudio.Common.StudioApplication;
using Tango.SharedUI;
using Tango.BL;
using Tango.MachineStudio.Common.EventLogging;
using Tango.BL.Enumerations;
using Tango.MachineStudio.UI.TFS;
using Tango.MachineStudio.Common;
using Tango.MachineStudio.Common.Update;
using Tango.Core.DI;
using Tango.Settings;
using Tango.Core;

namespace Tango.MachineStudio.UI.ViewModels
{
    /// <summary>
    /// Represents the Machine Studio loading view, view model.
    /// </summary>
    /// <seealso cref="Tango.SharedUI.ViewModel" />
    public class LoadingViewVM : StudioViewModel
    {
        private INotificationProvider _notificationProvider;
        private TeamFoundationServiceExtendedClient _tfs;
        private INavigationManager _navigationManager;
        private IStudioModuleLoader _studioModuleLoader;
        private IEventLogger _eventLogger;
        private LogManager logManager = LogManager.Default;
        public IStudioApplicationManager ApplicationManager { get; set; }

        private bool _isLoading;
        public bool IsLoading
        {
            get { return _isLoading; }
            set { _isLoading = value; RaisePropertyChangedAuto(); }
        }

        private String _status;
        public String Status
        {
            get { return _status; }
            set { _status = value; RaisePropertyChangedAuto(); }
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="LoadingViewVM"/> class.
        /// </summary>
        /// <param name="navigationManager">The navigation manager.</param>
        /// <param name="studioModuleLoader">The studio module loader.</param>
        /// <param name="notificationProvider">The notification provider.</param>
        public LoadingViewVM(IStudioApplicationManager applicationManager, INavigationManager navigationManager, IStudioModuleLoader studioModuleLoader, INotificationProvider notificationProvider, IEventLogger eventLogger, TeamFoundationServiceExtendedClient teamFoundationClient)
        {
            Status = "Loading, please wait...";
            _tfs = teamFoundationClient;
            _eventLogger = eventLogger;
            ApplicationManager = applicationManager;
            _navigationManager = navigationManager;
            _studioModuleLoader = studioModuleLoader;
            _notificationProvider = notificationProvider;
        }

        /// <summary>
        /// Called when the application has been started
        /// </summary>
        public override void OnApplicationStarted()
        {
            base.OnApplicationStarted();
            Load();
        }

        /// <summary>
        /// Load application modules.
        /// </summary>
        private void Load()
        {
            IsLoading = true;

            ThreadsHelper.StartStaThread(() =>
            {
                try
                {
                    try
                    {
                        Status = "Connecting to Team Foundation Services...";
                        _tfs.Initialize();
                        Thread.Sleep(500);
                    }
                    catch (Exception ex)
                    {
                        LogManager.Log(ex, "Could not initialize Team Foundation Service client.");
                    }

                    Status = "Loading, please wait...";

                    //ObservablesStaticCollections.Instance.Initialize();
                    //_eventLogger.Log(EventTypes.ApplicationStarted, "Application Started!");

                    Status = "Starting application...";

                    InvokeUI(() =>
                    {
                        //_studioModuleLoader.LoadModules();
                        _navigationManager.NavigateTo(NavigationView.LoginView);
                        IsLoading = false;
                    });
                }
                catch (Exception ex)
                {
                    logManager.Log(ex);

                    InvokeUINow(() =>
                    {
                        if (_notificationProvider.ShowQuestion("An error occurred while trying to connect to Twine database." + Environment.NewLine + "Would you like to try again?"))
                        {
                            Load();
                        }
                        else
                        {
                            ApplicationManager.ShutDown();
                        }
                    });
                }
            });
        }

        public override void OnApplicationReady()
        {
            
        }
    }
}
<mahapps:NumericUpDown KeyDown="NumericUpDown_KeyDown" MinHeight="20" MaxWidth="400" VerticalContentAlignment="Center" ScrollViewer.HorizontalScrollBarVisibility="Disabled" HorizontalAlignment="Center" Value="{Binding EditableValue, UpdateSourceTrigger=PropertyChanged}" Background="Transparent" HideUpDownButtons="True" InterceptArrowKeys="True" BorderThickness="0 0 0 1" BorderBrush="{StaticResource GrayBrush280}" InterceptMouseWheel="True" HasDecimals="True" HorizontalContentAlignment="Center" Foreground="{StaticResource GrayBrush280}"/> </DataTemplate> <DataTemplate x:Key="bool" DataType="{x:Type sys:Boolean}"> <ToggleButton Margin="10 2 0 0" IsChecked="{Binding EditableValue,UpdateSourceTrigger=PropertyChanged}" VerticalAlignment="Center" VerticalContentAlignment="Center" HorizontalAlignment="Right"></ToggleButton> </DataTemplate> </ContentControl.Resources> <ContentControl.Style> <Style TargetType="ContentControl"> <Setter Property="ContentTemplate" Value="{x:Null}"> </Setter> <Style.Triggers> <DataTrigger Binding="{Binding Type.Name}" Value="Int32"> <Setter Property="ContentTemplate" Value="{StaticResource int}" /> </DataTrigger> <DataTrigger Binding="{Binding Type.Name}" Value="Double"> <Setter Property="ContentTemplate" Value="{StaticResource double}" /> </DataTrigger> <DataTrigger Binding="{Binding Type.Name}" Value="Boolean"> <Setter Property="ContentTemplate" Value="{StaticResource bool}" /> </DataTrigger> </Style.Triggers> </Style> </ContentControl.Style> </ContentControl> </StackPanel> </ToggleButton.Content> <ToggleButton.Style> <Style TargetType="{x:Type ToggleButton}"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="ToggleButton"> <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="1" Background="{TemplateBinding Background}" Margin="0" Padding="3,0,4,2"> <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/> </Border> </ControlTemplate> </Setter.Value> </Setter> <Setter Property="BorderBrush" Value="Transparent"/> <Style.Triggers> <Trigger Property="IsMouseOver" Value="True"> <Setter Property="Background" Value="Transparent"></Setter> <Setter Property="BorderBrush" Value="Gray" /> </Trigger> <Trigger Property="IsPressed" Value="True"> <Setter Property="Background" Value="Transparent"></Setter> <Setter Property="BorderBrush" Value="{StaticResource AccentColorBrush}" /> </Trigger> <Trigger Property="IsChecked" Value="True"> <Setter Property="Background" Value="Transparent"></Setter> <Setter Property="BorderBrush" Value="{StaticResource RedBrush300}" /> </Trigger> </Style.Triggers> </Style> </ToggleButton.Style> </ToggleButton> <materialDesign:PackIcon x:Name="pencilicon" Foreground="{StaticResource RedBrush300}" Kind="Pencil" VerticalAlignment="Center" Visibility="{Binding IsSelected,Converter={StaticResource BooleanToVisibilityConverter}}"/> <StackPanel Margin="10 0 0 0" Orientation="Horizontal"> <materialDesign:PackIcon VerticalAlignment="Center" Visibility="{Binding IsValuesMatched,Converter={StaticResource BooleanToVisibilityConverter}}" Width="18" Height="18" Kind="Alert" ToolTip="Parameter is overridden but equal" Foreground="{StaticResource OrangeBrush300}"> <materialDesign:PackIcon.Style> <Style TargetType="FrameworkElement"> <Style.Triggers> <EventTrigger RoutedEvent="Loaded"> <EventTrigger.Actions> <BeginStoryboard x:Name="alertStory"> <Storyboard> <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="Opacity" Duration="00:00:01" RepeatBehavior="Forever"> <DiscreteDoubleKeyFrame KeyTime="00:00:00" Value="1" /> <DiscreteDoubleKeyFrame KeyTime="00:00:0.5" Value="0" /> </DoubleAnimationUsingKeyFrames> </Storyboard> </BeginStoryboard> </EventTrigger.Actions> </EventTrigger> <EventTrigger RoutedEvent="Unloaded"> <EventTrigger.Actions> <RemoveStoryboard BeginStoryboardName="alertStory" /> </EventTrigger.Actions> </EventTrigger> </Style.Triggers> </Style> </materialDesign:PackIcon.Style> </materialDesign:PackIcon> <Button Margin="5 0 0 0" Command="{Binding DeleteCommand}" VerticalAlignment="Center" Width="24" Height="24" Padding="0" Style="{StaticResource MaterialDesignFlatButton}" Visibility="{Binding HasDifferences,Converter={StaticResource BooleanToVisibilityConverter}}"> <materialDesign:PackIcon Width="16" Height="16" Kind="Close" ToolTip="Clear" Foreground="{StaticResource RedBrush300}" /> </Button> </StackPanel> </StackPanel> </Grid> <DataTemplate.Triggers> <MultiDataTrigger> <MultiDataTrigger.Conditions> <Condition Binding="{Binding ElementName=cbShowOnlyDifference, Path=IsChecked}" Value="True" /> <Condition Binding="{Binding HasDifferences}" Value="False" /> </MultiDataTrigger.Conditions> <MultiDataTrigger.Setters> <Setter Property="Visibility" Value="Collapsed" /> </MultiDataTrigger.Setters> </MultiDataTrigger> </DataTemplate.Triggers> </DataTemplate> </ItemsControl.ItemTemplate> </ItemsControl> </Border> </StackPanel> <DataTemplate.Triggers> <MultiDataTrigger> <MultiDataTrigger.Conditions> <Condition Binding="{Binding ElementName=cbShowOnlyDifference, Path=IsChecked}" Value="True" /> <Condition Binding="{Binding HasDifferences}" Value="False" /> </MultiDataTrigger.Conditions> <MultiDataTrigger.Setters> <Setter Property="Visibility" Value="Collapsed" /> </MultiDataTrigger.Setters> </MultiDataTrigger> </DataTemplate.Triggers> </DataTemplate> </ItemsControl.ItemTemplate> </ItemsControl> </StackPanel> </Grid> </Border> </Grid> </DockPanel> </DataTemplate> </ItemsControl.ItemTemplate> </ItemsControl> </Grid> </ScrollViewer> </Grid> </Grid> </UserControl>