aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/Scripting/Tango.Scripting.Editors/Editing/SelectionLayer.cs
blob: 28631affef740aabd208bbd660a7bdb890cd4681 (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
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)

using System;
using System.Windows;
using System.Windows.Media;

using Tango.Scripting.Editors.Rendering;

namespace Tango.Scripting.Editors.Editing
{
	sealed class SelectionLayer : Layer, IWeakEventListener
	{
		readonly TextArea textArea;
		
		public SelectionLayer(TextArea textArea) : base(textArea.TextView, KnownLayer.Selection)
		{
			this.IsHitTestVisible = false;
			
			this.textArea = textArea;
			TextViewWeakEventManager.VisualLinesChanged.AddListener(textView, this);
			TextViewWeakEventManager.ScrollOffsetChanged.AddListener(textView, this);
		}
		
		bool IWeakEventListener.ReceiveWeakEvent(Type managerType, object sender, EventArgs e)
		{
			if (managerType == typeof(TextViewWeakEventManager.VisualLinesChanged)
			    || managerType == typeof(TextViewWeakEventManager.ScrollOffsetChanged))
			{
				InvalidateVisual();
				return true;
			}
			return false;
		}
		
		protected override void OnRender(DrawingContext drawingContext)
		{
			base.OnRender(drawingContext);
			
			BackgroundGeometryBuilder geoBuilder = new BackgroundGeometryBuilder();
			geoBuilder.AlignToMiddleOfPixels = true;
			geoBuilder.ExtendToFullWidthAtLineEnd = textArea.Selection.EnableVirtualSpace;
			geoBuilder.CornerRadius = textArea.SelectionCornerRadius;
			foreach (var segment in textArea.Selection.Segments) {
				geoBuilder.AddSegment(textView, segment);
			}
			Geometry geometry = geoBuilder.CreateGeometry();
			if (geometry != null) {
				drawingContext.DrawGeometry(textArea.SelectionBrush, textArea.SelectionBorder, geometry);
			}
		}
	}
}
t;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="{StaticResource WhiteBrush100}"> <Border.Effect> <DropShadowEffect /> </Border.Effect> <Grid> <StackPanel Orientation="Horizontal"> <Button Margin="10 0 0 0" Height="50" Style="{StaticResource MaterialDesignFlatButton}" Foreground="{StaticResource DarkGrayBrush}" 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" Background="{StaticResource Logging.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}" IsEnabled="{Binding IsRealTime}" Command="{Binding ToggleRealTimePaused}" Padding="0" Height="50" Width="50" Foreground="{StaticResource DarkGrayBrush}" 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" IsEnabled="{Binding IsRealTime}" 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> <Border BorderThickness="1" BorderBrush="#3B3B3B" VerticalAlignment="Center" Padding="10 7" CornerRadius="5" Margin="30 0 0 0"> <StackPanel> <ItemsControl VerticalAlignment="Center" ItemsSource="{Binding SelectedLogCategories}"> <ItemsControl.ItemsPanel> <ItemsPanelTemplate> <StackPanel Orientation="Horizontal" /> </ItemsPanelTemplate> </ItemsControl.ItemsPanel> <ItemsControl.ItemTemplate> <DataTemplate> <StackPanel Orientation="Horizontal" Margin="10 0 0 0"> <CheckBox IsChecked="{Binding IsSelected}" VerticalAlignment="Center"></CheckBox> <TextBlock Text="{Binding Data}" Margin="5 0 0 0" VerticalAlignment="Center"></TextBlock> </StackPanel> </DataTemplate> </ItemsControl.ItemTemplate> </ItemsControl> </StackPanel> </Border> <CheckBox VerticalAlignment="Center" Margin="20 0 0 0" IsChecked="{Binding ProcessDebugLogs}" IsEnabled="{Binding IsRealTime}" ToolTip="Allow incoming real-time debug logs">Enable 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="{StaticResource TransparentBackgroundBrush400}"> <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> <DataTrigger Binding="{Binding LogObject}" Value="External Bridge"> <Setter Property="Foreground" Value="#28A805" /> </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="{StaticResource OrangeBrush}"></Setter> </DataTrigger> <DataTrigger Binding="{Binding Category}" Value="Error"> <Setter Property="Kind" Value="AlertOctagon"></Setter> <Setter Property="Foreground" Value="{StaticResource RedBrush100}"></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="{StaticResource GrayBrush300}"></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>