aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/PPC/Modules/Tango.PPC.Technician/Views/RemoteConnectionsView.xaml
blob: af93a56e5ae138a7cbe78b1d197c8af9c9f0c4d8 (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
<UserControl x:Class="Tango.PPC.Technician.Views.RemoteConnectionsView"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:vm="clr-namespace:Tango.PPC.Technician.ViewModels"
             xmlns:touch="clr-namespace:Tango.Touch.Controls;assembly=Tango.Touch"
             xmlns:global="clr-namespace:Tango.PPC.Technician"
             xmlns:local="clr-namespace:Tango.PPC.Technician.Views"
             mc:Ignorable="d" 
             d:DesignHeight="1280" d:DesignWidth="800" d:DataContext="{d:DesignInstance Type=vm:RemoteConnectionsViewVM, IsDesignTimeCreatable=False}" DataContext="{x:Static global:ViewModelLocator.RemoteConnectionsViewVM}">
    <Grid Background="{StaticResource TangoMidBackgroundBrush}">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="1*"/>
        </Grid.RowDefinitions>

        <Border Padding="20" Background="{StaticResource TangoPrimaryBackgroundBrush}" BorderThickness="0 0 0 1" BorderBrush="{StaticResource TangoDividerBrush}">
            <Border.Effect>
                <DropShadowEffect Color="Silver" ShadowDepth="0" BlurRadius="20" Opacity="1" />
            </Border.Effect>
            <TextBlock VerticalAlignment="Center" FontSize="{StaticResource TangoHeaderFontSize}" FontWeight="SemiBold">Remote Connections</TextBlock>
        </Border>

        <Grid Grid.Row="1">
            <Grid Margin="20">
                <DockPanel>
                    <touch:TouchButton Command="{Binding DisconnectCommand}" DockPanel.Dock="Bottom" HorizontalAlignment="Right" Style="{StaticResource TangoHollowButton}" Height="60" Width="250" Margin="0 20 0 0">DISCONNECT</touch:TouchButton>
                    <touch:TouchSimpleDataGrid IsSynchronizedWithCurrentItem="True" SelectedItem="{Binding SelectedReceiver,Mode=TwoWay}" Background="{StaticResource TangoPrimaryBackgroundBrush}" AutoGenerateColumns="False" SelectionMode="Single" SelectionUnit="FullRow" BorderThickness="1" BorderBrush="{StaticResource TangoDarkForegroundBrush}" HeadersVisibility="Column" CanUserAddRows="False" CanUserDeleteRows="False" CanUserReorderColumns="False" CanUserResizeRows="False" CanUserResizeColumns="False" CanUserSortColumns="False" IsReadOnly="True" ItemsSource="{Binding ExternalBridgeService.ActiveReceivers}" VerticalGridLinesBrush="{x:Null}" HorizontalGridLinesBrush="{StaticResource TangoGrayBrush}" RowHeight="50" VerticalScrollBarVisibility="Visible" HorizontalScrollBarVisibility="Disabled">
                        <DataGrid.Resources>
                            <Style BasedOn="{StaticResource {x:Type DataGridColumnHeader}}" TargetType="{x:Type DataGridColumnHeader}">
                                <Setter Property="Background" Value="{StaticResource TangoDarkForegroundBrush}" />
                                <Setter Property="Foreground" Value="{StaticResource TangoLightForegroundBrush}" />
                                <Setter Property="Padding" Value="5"></Setter>
                            </Style>
                        </DataGrid.Resources>
                        <DataGrid.RowStyle>
                            <Style TargetType="DataGridRow" BasedOn="{StaticResource {x:Type DataGridRow}}">
                                <Style.Triggers>
                                    <Trigger Property="IsSelected" Value="True">
                                        <Setter Property="Background" Value="Transparent"></Setter>
                                        <Setter Property="Foreground" Value="{StaticResource TangoPrimaryAccentBrush}" />
                                    </Trigger>
                                    <Trigger Property="IsFocused" Value="True">
                                        <Setter Property="Background" Value="Transparent"></Setter>
                                        <Setter Property="Foreground" Value="{StaticResource TangoPrimaryAccentBrush}" />
                                    </Trigger>
                                </Style.Triggers>
                            </Style>
                        </DataGrid.RowStyle>
                        <DataGrid.CellStyle>
                            <Style TargetType="{x:Type DataGridCell}">
                                <Setter Property="Template">
                                    <Setter.Value>
                                        <ControlTemplate TargetType="{x:Type DataGridCell}">
                                            <Grid Background="{TemplateBinding Background}">
                                                <ContentPresenter VerticalAlignment="Center" />
                                            </Grid>
                                        </ControlTemplate>
                                    </Setter.Value>
                                </Setter>
                                <Style.Triggers>
                                    <Trigger Property="IsSelected" Value="True">
                                        <Setter Property="Background" Value="Transparent"></Setter>
                                        <Setter Property="Foreground" Value="{StaticResource TangoPrimaryAccentBrush}" />
                                    </Trigger>
                                </Style.Triggers>
                            </Style>
                        </DataGrid.CellStyle>
                        <DataGrid.Columns>
                            <DataGridTemplateColumn Header="" Width="50">
                                <DataGridTemplateColumn.CellTemplate>
                                    <DataTemplate>
                                        <touch:TouchIcon Width="16" Icon="Bridge" />
                                    </DataTemplate>
                                </DataGridTemplateColumn.CellTemplate>
                            </DataGridTemplateColumn>
                            <DataGridTextColumn Header="App ID" Width="130" Binding="{Binding LoginInfo.AppID}" />
                            <DataGridTextColumn Header="User" Width="180" Binding="{Binding LoginInfo.UserName}" />
                            <DataGridTextColumn Header="Host Name" Width="180" Binding="{Binding LoginInfo.HostName}" />
                            <DataGridTextColumn Header="Safety Level Permissions" Width="1*" Binding="{Binding LoginInfo.RequireSafetyLevelOperations,Converter={StaticResource BooleanToYesNoConverter}}" />
                        </DataGrid.Columns>
                    </touch:TouchSimpleDataGrid>
                </DockPanel>
            </Grid>
        </Grid>
    </Grid>
</UserControl>
class="s">"EndFragment:" + endFragment.ToString("d8", CultureInfo.InvariantCulture)); return b.ToString(); } /// <summary> /// Sets the TextDataFormat.Html on the data object to the specified html fragment. /// This helper methods takes care of creating the necessary CF_HTML header. /// </summary> public static void SetHtml(DataObject dataObject, string htmlFragment) { if (dataObject == null) throw new ArgumentNullException("dataObject"); if (htmlFragment == null) throw new ArgumentNullException("htmlFragment"); string htmlStart = @"<!DOCTYPE HTML PUBLIC ""-//W3C//DTD HTML 4.0 Transitional//EN"">" + Environment.NewLine + "<HTML>" + Environment.NewLine + "<BODY>" + Environment.NewLine + "<!--StartFragment-->" + Environment.NewLine; string htmlEnd = "<!--EndFragment-->" + Environment.NewLine + "</BODY>" + Environment.NewLine + "</HTML>" + Environment.NewLine; string dummyHeader = BuildHeader(0, 0, 0, 0); // the offsets are stored as UTF-8 bytes (see CF_HTML documentation) int startHTML = dummyHeader.Length; int startFragment = startHTML + htmlStart.Length; int endFragment = startFragment + Encoding.UTF8.GetByteCount(htmlFragment); int endHTML = endFragment + htmlEnd.Length; string cf_html = BuildHeader(startHTML, endHTML, startFragment, endFragment) + htmlStart + htmlFragment + htmlEnd; Debug.WriteLine(cf_html); dataObject.SetText(cf_html, TextDataFormat.Html); } /// <summary> /// Creates a HTML fragment from a part of a document. /// </summary> /// <param name="document">The document to create HTML from.</param> /// <param name="highlighter">The highlighter used to highlight the document. <c>null</c> is valid and will create HTML without any highlighting.</param> /// <param name="segment">The part of the document to create HTML for. You can pass <c>null</c> to create HTML for the whole document.</param> /// <param name="options">The options for the HTML creation.</param> /// <returns>HTML code for the document part.</returns> public static string CreateHtmlFragment(TextDocument document, IHighlighter highlighter, ISegment segment, HtmlOptions options) { if (document == null) throw new ArgumentNullException("document"); if (options == null) throw new ArgumentNullException("options"); if (highlighter != null && highlighter.Document != document) throw new ArgumentException("Highlighter does not belong to the specified document."); if (segment == null) segment = new SimpleSegment(0, document.TextLength); StringBuilder html = new StringBuilder(); int segmentEndOffset = segment.EndOffset; DocumentLine line = document.GetLineByOffset(segment.Offset); while (line != null && line.Offset < segmentEndOffset) { HighlightedLine highlightedLine; if (highlighter != null) highlightedLine = highlighter.HighlightLine(line.LineNumber); else highlightedLine = new HighlightedLine(document, line); SimpleSegment s = segment.GetOverlap(line); if (html.Length > 0) html.AppendLine("<br>"); html.Append(highlightedLine.ToHtml(s.Offset, s.EndOffset, options)); line = line.NextLine; } return html.ToString(); } /// <summary> /// Escapes text and writes the result to the StringBuilder. /// </summary> internal static void EscapeHtml(StringWriter w, string text, HtmlOptions options) { int spaceCount = -1; foreach (char c in text) { if (c == ' ') { if (spaceCount < 0) w.Write("&nbsp;"); else spaceCount++; } else if (c == '\t') { if (spaceCount < 0) spaceCount = 0; spaceCount += options.TabSize; } else { if (spaceCount == 1) { w.Write(' '); } else if (spaceCount >= 1) { for (int i = 0; i < spaceCount; i++) { w.Write("&nbsp;"); } } spaceCount = 0; switch (c) { case '<': w.Write("&lt;"); break; case '>': w.Write("&gt;"); break; case '&': w.Write("&amp;"); break; case '"': w.Write("&quot;"); break; default: w.Write(c); break; } } } for (int i = 0; i < spaceCount; i++) { w.Write("&nbsp;"); } } } /// <summary> /// Holds options for converting text to HTML. /// </summary> public class HtmlOptions { /// <summary> /// Creates a default HtmlOptions instance. /// </summary> public HtmlOptions() { this.TabSize = 4; } /// <summary> /// Creates a new HtmlOptions instance that copies applicable options from the <see cref="TextEditorOptions"/>. /// </summary> public HtmlOptions(TextEditorOptions options) : this() { if (options == null) throw new ArgumentNullException("options"); this.TabSize = options.IndentationSize; } /// <summary> /// The amount of spaces a tab gets converted to. /// </summary> public int TabSize { get; set; } /// <summary> /// Writes the HTML attribute for the style to the text writer. /// </summary> public virtual void WriteStyleAttributeForColor(TextWriter writer, HighlightingColor color) { if (writer == null) throw new ArgumentNullException("writer"); if (color == null) throw new ArgumentNullException("color"); writer.Write(" style=\""); writer.Write(color.ToCss()); writer.Write("\""); } /// <summary> /// Gets whether the color needs to be written out to HTML. /// </summary> public virtual bool ColorNeedsSpanForStyling(HighlightingColor color) { if (color == null) throw new ArgumentNullException("color"); return !string.IsNullOrEmpty(color.ToCss()); } } }