aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.DB/Managers/ViewsManager.cs
blob: e136c5983cb529ec7ffe1382e9162984677b6583 (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
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using Tango.Core.Commands;
using Tango.MachineStudio.DB.CustomAttributes;
using Tango.MachineStudio.DB.Views.DBViews;

namespace Tango.MachineStudio.DB.Managers
{
    /// <summary>
    /// Represents the data table views manager.
    /// </summary>
    public static class ViewsManager
    {
        /// <summary>
        /// Gets or sets the displayed views.
        /// </summary>
        public static ObservableCollection<RegisteredView> DisplayedViews { get; set; }

        /// <summary>
        /// Gets or sets all the views.
        /// </summary>
        public static ObservableCollection<RegisteredView> DbViews { get; set; }

        /// <summary>
        /// Initializes the <see cref="ViewsManager"/> class.
        /// </summary>
        static ViewsManager()
        {
            DisplayedViews = new ObservableCollection<RegisteredView>();
            DbViews = new ObservableCollection<RegisteredView>();

            foreach (var type in typeof(ViewsManager).Assembly.GetTypes().Where(x => x.CustomAttributes.Count() > 0 && x.CustomAttributes.First().AttributeType == typeof(DBViewAttribute)).OrderBy(x => x.Name))
            {
                DbViews.Add(new RegisteredView(type.Name.Replace("View", "").ToTitle(), Activator.CreateInstance(type) as FrameworkElement));
            }
        }
    }
}
chinesProvider" /> <converters:DateTimeUTCToShortDateTimeConverter x:Key="DateTimeUTCToShortDateTimeConverter" /> <converters:DateTimeUTCToStringConverter x:Key="DateTimeUTCToStringConverter" /> <localConverters:DateIsInListToBooleanConverter x:Key="DateIsInListToBooleanConverter" /> <Style x:Key="CustomCalendarDayButtonStyle" TargetType="{x:Type CalendarDayButton}" BasedOn="{StaticResource MaterialDesignCalendarDayButton}"> <Style.Triggers> <DataTrigger Value="True"> <DataTrigger.Binding> <MultiBinding Converter="{StaticResource DateIsInListToBooleanConverter}"> <Binding /> <Binding RelativeSource="{RelativeSource AncestorType=UserControl}" Path="DataContext.Dates" /> <Binding RelativeSource="{RelativeSource AncestorType=DatePicker}" Path="IsDropDownOpen" ></Binding> </MultiBinding> </DataTrigger.Binding> <Setter Property="Foreground" Value="{StaticResource AccentColorBrush}" /> </DataTrigger> </Style.Triggers> </Style> <Style x:Key="HighlightDatePickerStyle" TargetType="{x:Type Calendar}" BasedOn="{StaticResource {x:Type Calendar}}"> <Setter Property="CalendarDayButtonStyle" Value="{StaticResource CustomCalendarDayButtonStyle}" /> </Style> <Style TargetType="DatePickerTextBox" BasedOn="{StaticResource {x:Type DatePickerTextBox}}"> <Setter Property="IsReadOnly" Value="True"/> </Style> </UserControl.Resources> <Grid> <Grid> <Grid.RowDefinitions> <RowDefinition Height="79"/> <RowDefinition Height="1*"/> </Grid.RowDefinitions> <Border Background="#F1F1F1"> <Border.Effect> <DropShadowEffect /> </Border.Effect> <Grid> <StackPanel Orientation="Horizontal"> <Button Margin="10 0 0 0" Height="50" Style="{StaticResource MaterialDesignFlatButton}" Foreground="#202020" Command="{Binding NavigateToHomeCommand}" HorizontalContentAlignment="Left"> <StackPanel Orientation="Horizontal" > <materialDesign:PackIcon Kind="ArrowLeftBold" Width="20" Height="20" /> <TextBlock Margin="5 0 0 0" FontSize="16">BACK</TextBlock> </StackPanel> </Button> <Border Margin="10" Padding="5" BorderBrush="DimGray" BorderThickness="1"> <Border.Background> <LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1"> <GradientStop Color="White"/> <GradientStop Color="#FFEAEAEA" Offset="1"/> </LinearGradientBrush> </Border.Background> <StackPanel Orientation="Horizontal"> <materialDesign:PackIcon Kind="Calendar" Width="24" Height="24" VerticalAlignment="Bottom" Margin="0 0 0 5" /> <DatePicker x:Name="datePicker" DisplayDateStart="{Binding MinDate}" DisplayDateEnd="{Binding MaxDate}" CalendarStyle="{StaticResource HighlightDatePickerStyle}" SelectedDate="{Binding SelectedDate}" materialDesign:HintAssist.Hint="Pick Date" Margin="10 0 0 5" Width="200" VerticalAlignment="Bottom" FontSize="16"> </DatePicker> <ToggleButton VerticalAlignment="Bottom" Margin="20 0 0 5" IsChecked="{Binding IsRealTime}"></ToggleButton> <TextBlock VerticalAlignment="Center" Margin="10 17 0 0">Real-Time</TextBlock> </StackPanel> </Border> <Button Style="{StaticResource MaterialDesignFlatButton}" Command="{Binding ToggleRealTimePaused}" Padding="0" Height="50" Width="50" Foreground="#202020" ToolTip="Pause/Resume Real-Time"> <materialDesign:PackIcon Width="50" Height="50"> <materialDesign:PackIcon.Style> <Style TargetType="materialDesign:PackIcon"> <Setter Property="Kind" Value="Pause"></Setter> <Style.Triggers> <DataTrigger Binding="{Binding RealTimePaused}" Value="True"> <Setter Property="Kind" Value="Play"></Setter> </DataTrigger> </Style.Triggers> </Style> </materialDesign:PackIcon.Style> </materialDesign:PackIcon> </Button> <Button Margin="20 0 0 0" Background="#FF7777" BorderBrush="#FF7777" ToolTip="Clear real-time logs" Command="{Binding ClearRealTimeLogsCommand}"> <StackPanel Orientation="Horizontal"> <materialDesign:PackIcon Width="24" Height="24" Kind="DeleteSweep" /> <TextBlock VerticalAlignment="Center" Margin="10 0 0 0">CLEAR</TextBlock> </StackPanel> </Button> <CheckBox VerticalAlignment="Center" Margin="20 0 0 0" IsChecked="{Binding DisplayDebug}" ToolTip="Hide/Display debug logs (applies only when debug logs are enabled in the settings file)">Process Debug Logs</CheckBox> </StackPanel> <StackPanel Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Right" Margin="0 0 30 0"> <materialDesign:PackIcon Kind="Magnify" Width="24" Height="24" /> <TextBox VerticalAlignment="Center" Margin="10 0 0 0" Width="300" Text="{Binding Filter,UpdateSourceTrigger=PropertyChanged}" IsEnabled="{Binding RealTimePaused}" materialDesign:HintAssist.Hint="Filter" /> </StackPanel> </Grid> </Border> <Grid Grid.Row="1" Background="#B3FFFFFF"> <Grid Margin="10"> <Grid.ColumnDefinitions> <ColumnDefinition Width="1*"/> </Grid.ColumnDefinitions> <Grid> <Grid> <Grid> <DataGrid x:Name="grid" Background="Transparent" RenderOptions.EdgeMode="Aliased" RenderOptions.BitmapScalingMode="LowQuality" MaxWidth="{Binding RelativeSource={RelativeSource AncestorType=Grid},Path=ActualWidth}" AutoGenerateColumns="False" SelectionMode="Single" SelectedCellsChanged="grid_SelectedCellsChanged" ItemsSource="{Binding LogsViewSource}" SelectedItem="{Binding SelectedLog}" RowHeight="40" CanUserAddRows="False" CanUserDeleteRows="False" CanUserReorderColumns="True" IsReadOnly="True"> <DataGrid.RowStyle> <Style TargetType="DataGridRow" BasedOn="{StaticResource {x:Type DataGridRow}}"> <Style.Triggers> <Trigger Property="IsMouseOver" Value="True"> <Setter Property="Background" Value="Transparent"></Setter> <Setter Property="Foreground" Value="{StaticResource AccentColorBrush}" /> <Setter Property="Cursor" Value="Hand"></Setter> </Trigger> <Trigger Property="IsSelected" Value="True"> <Setter Property="Background" Value="Transparent"></Setter> </Trigger> <Trigger Property="IsFocused" Value="True"> <Setter Property="Background" Value="Transparent"></Setter> </Trigger> <DataTrigger Binding="{Binding CallerMethodName}" Value="OnStartup"> <Setter Property="Background" Value="{StaticResource AccentColorBrush}"></Setter> <Setter Property="Foreground" Value="White" /> <Setter Property="FontWeight" Value="SemiBold"></Setter> <Setter Property="Cursor" Value="Arrow"></Setter> </DataTrigger> </Style.Triggers> </Style> </DataGrid.RowStyle> <DataGrid.CellStyle> <Style TargetType="DataGridCell" BasedOn="{StaticResource {x:Type DataGridCell}}"> <Setter Property="BorderThickness" Value="0"/> <Setter Property="FocusVisualStyle" Value="{x:Null}"/> <Setter Property="VerticalContentAlignment" Value="Center"></Setter> <Style.Triggers> <Trigger Property="IsSelected" Value="True"> <Setter Property="Background" Value="Transparent"></Setter> </Trigger> <DataTrigger Binding="{Binding CallerMethodName}" Value="OnStartup"> <Setter Property="Background" Value="{StaticResource AccentColorBrush}"></Setter> <Setter Property="Foreground" Value="White" /> <Setter Property="FontWeight" Value="SemiBold"></Setter> <Setter Property="Cursor" Value="Arrow"></Setter> </DataTrigger> </Style.Triggers> </Style> </DataGrid.CellStyle> <DataGrid.Columns> <DataGridTemplateColumn Header="#"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <materialDesign:PackIcon Width="16" Height="16"> <materialDesign:PackIcon.Style> <Style TargetType="materialDesign:PackIcon"> <Setter Property="Kind" Value="Alert"></Setter> <Style.Triggers> <DataTrigger Binding="{Binding Category}" Value="Info"> <Setter Property="Kind" Value="Information"></Setter> <Setter Property="Foreground" Value="DimGray"></Setter> </DataTrigger> <DataTrigger Binding="{Binding Category}" Value="Warning"> <Setter Property="Kind" Value="Alert"></Setter> <Setter Property="Foreground" Value="#FFA300"></Setter> </DataTrigger> <DataTrigger Binding="{Binding Category}" Value="Error"> <Setter Property="Kind" Value="AlertOctagon"></Setter> <Setter Property="Foreground" Value="#FF5C5C"></Setter> </DataTrigger> <DataTrigger Binding="{Binding Category}" Value="Critical"> <Setter Property="Kind" Value="BellPlus"></Setter> <Setter Property="Foreground" Value="Red"></Setter> </DataTrigger> <DataTrigger Binding="{Binding Category}" Value="Debug"> <Setter Property="Kind" Value="Bug"></Setter> <Setter Property="Foreground" Value="#303030"></Setter> </DataTrigger> <DataTrigger Binding="{Binding CallerMethodName}" Value="OnStartup"> <Setter Property="Kind" Value="ClockFast"></Setter> <Setter Property="Foreground" Value="White"></Setter> </DataTrigger> </Style.Triggers> </Style> </materialDesign:PackIcon.Style> </materialDesign:PackIcon> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> <DataGridTextColumn Header="DATE TIME" Binding="{Binding TimeStamp,StringFormat='MM/dd/yyyy HH:mm:ss.ff'}" /> <DataGridTextColumn Header="FILE" Binding="{Binding RelativeCallerFile}" /> <DataGridTextColumn Header="METHOD" Binding="{Binding CallerMethodName}" /> <DataGridTextColumn Header="LINE" Binding="{Binding CallerLineNumber}" /> <DataGridTemplateColumn Header="MESSAGE" Width="1*"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <TextBlock Text="{Binding Message}" TextTrimming="CharacterEllipsis"></TextBlock> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> </DataGrid.Columns> </DataGrid> </Grid> </Grid> </Grid> </Grid> </Grid> </Grid> </Grid> </UserControl>