You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
176 lines
9.7 KiB
176 lines
9.7 KiB
<UserControl x:Class="MultiTerm.Wpf.View.ShellView"
|
|
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:sys="clr-namespace:System;assembly=mscorlib"
|
|
xmlns:conv="clr-namespace:MultiTerm.Wpf.ValueConverters"
|
|
xmlns:controls="clr-namespace:MultiTerm.Wpf.Controls"
|
|
xmlns:custom_controls="clr-namespace:MultiTerm.Wpf.CustomControl;assembly=MultiTerm.Wpf.CustomControl"
|
|
xmlns:vm="clr-namespace:MultiTerm.Core.ViewModel;assembly=MultiTerm.Core"
|
|
xmlns:v="clr-namespace:MultiTerm.Wpf.View"
|
|
xmlns:types="clr-namespace:MultiTerm.Core.Types;assembly=MultiTerm.Core"
|
|
xmlns:protocol_types="clr-namespace:MultiTerm.Protocols.Types;assembly=MultiTerm.Protocols"
|
|
xmlns:helpers="clr-namespace:MultiTerm.Wpf.Helpers"
|
|
mc:Ignorable="d"
|
|
d:DesignHeight="600" d:DesignWidth="1200">
|
|
<UserControl.Resources>
|
|
<!-- Value Converters -->
|
|
<conv:EnumDescriptionToMenuItemConverter x:Key="EnumDescriptionConverter"/>
|
|
<conv:MessageImportanceToBrushConverter x:Key="MsgImportanceBrushConverter"/>
|
|
|
|
<!-- Data Sources -->
|
|
<ObjectDataProvider x:Key="NewlineSeparatorTypeValues"
|
|
ObjectType="{x:Type sys:Enum}"
|
|
MethodName="GetValues">
|
|
<ObjectDataProvider.MethodParameters>
|
|
<x:Type TypeName="types:NewlineSeparatorType" />
|
|
</ObjectDataProvider.MethodParameters>
|
|
</ObjectDataProvider>
|
|
<ObjectDataProvider x:Key="TerminalViewTypeValues"
|
|
ObjectType="{x:Type sys:Enum}"
|
|
MethodName="GetValues">
|
|
<ObjectDataProvider.MethodParameters>
|
|
<x:Type TypeName="types:TerminalViewType" />
|
|
</ObjectDataProvider.MethodParameters>
|
|
</ObjectDataProvider>
|
|
<ObjectDataProvider x:Key="ProtocolTypeValues"
|
|
ObjectType="{x:Type sys:Enum}"
|
|
MethodName="GetValues">
|
|
<ObjectDataProvider.MethodParameters>
|
|
<x:Type TypeName="protocol_types:ProtocolType" />
|
|
</ObjectDataProvider.MethodParameters>
|
|
</ObjectDataProvider>
|
|
</UserControl.Resources>
|
|
|
|
<DockPanel>
|
|
<Menu DockPanel.Dock="Top">
|
|
<MenuItem Header="_File"/>
|
|
<MenuItem Header="_Edit">
|
|
<MenuItem Header="_Copy" InputGestureText="Ctrl + C">
|
|
<!-- <MenuItem.Icon> // TODO
|
|
<Image Width="16" Height="16" Source="copy.png"/>
|
|
</MenuItem.Icon>-->
|
|
</MenuItem>
|
|
<MenuItem Header="_Paste" InputGestureText="Ctrl + P">
|
|
<!-- <MenuItem.Icon> // TODO
|
|
<Image Width="16" Height="16" Source="paste.png"/>
|
|
</MenuItem.Icon>-->
|
|
</MenuItem>
|
|
</MenuItem>
|
|
<MenuItem Header="_Settings">
|
|
<controls:SingleSelectSubMenu Title="Default Newline Separator on Receive" HorizontalContentAlignment="Left" VerticalContentAlignment="Top"
|
|
OptionsSource="{Binding Source={StaticResource NewlineSeparatorTypeValues}}"
|
|
SelectedMenuItem="{Binding DefaultReceiveNewlineSeparator, Mode=TwoWay, Converter={StaticResource EnumDescriptionConverter}}">
|
|
</controls:SingleSelectSubMenu>
|
|
<controls:SingleSelectSubMenu Title="Default Newline Separator on Send"
|
|
OptionsSource="{Binding Source={StaticResource NewlineSeparatorTypeValues}}"
|
|
SelectedMenuItem="{Binding DefaultSendNewlineSeparator, Mode=TwoWay, Converter={StaticResource EnumDescriptionConverter}}">
|
|
</controls:SingleSelectSubMenu>
|
|
</MenuItem>
|
|
<MenuItem Header="_View"/>
|
|
<MenuItem Header="_About"/>
|
|
</Menu>
|
|
|
|
<!-- Bottom status bar with separator -->
|
|
<StatusBar DockPanel.Dock="Bottom">
|
|
<StatusBarItem>
|
|
<TextBlock Text="{Binding StatusBarMessage}" Foreground="{Binding Path=StatusBarMessageImportance, Converter={StaticResource MsgImportanceBrushConverter}}"/>
|
|
</StatusBarItem>
|
|
</StatusBar>
|
|
<Separator DockPanel.Dock="Bottom" Margin="0 5 0 5"/>
|
|
|
|
<!-- Left Panel that holds History and Command Sets -->
|
|
<StackPanel Orientation="Vertical" DockPanel.Dock="Left" Width="150">
|
|
|
|
</StackPanel>
|
|
|
|
<!-- Grid to contain hidden add Tab Button, and the tab control -->
|
|
<Grid DockPanel.Dock="Right">
|
|
<Grid.RowDefinitions>
|
|
<RowDefinition Height="0"/>
|
|
<RowDefinition Height="*"/>
|
|
</Grid.RowDefinitions>
|
|
<Grid.ColumnDefinitions>
|
|
<ColumnDefinition Width="0"/>
|
|
<ColumnDefinition Width="*"/>
|
|
</Grid.ColumnDefinitions>
|
|
|
|
<Grid.Resources>
|
|
<!-- Binding Proxy to provide DataContext to elements within ContextMenu -->
|
|
<helpers:BindingProxy x:Key="proxy" Data="{Binding}"/>
|
|
</Grid.Resources>
|
|
|
|
<!-- Button with context menu that is never visible -->
|
|
<Button Visibility="Collapsed" Grid.Row="0" Grid.Column="0">
|
|
<Button.ContextMenu>
|
|
<ContextMenu x:Name="AddTabContextMenu" PlacementRectangle="{Binding RelativeSource={RelativeSource Self}}">
|
|
<!-- View types -->
|
|
<controls:SingleSelectSubMenu Title="View type"
|
|
OptionsSource="{Binding Source={StaticResource TerminalViewTypeValues}}"
|
|
SelectedMenuItem="{Binding Data.SelectedTerminalViewType, Mode=TwoWay, Source={StaticResource proxy},
|
|
Converter={StaticResource EnumDescriptionConverter}}">
|
|
</controls:SingleSelectSubMenu>
|
|
|
|
<Separator/>
|
|
|
|
<!-- Protocol types -->
|
|
<controls:CommandableSubMenu Title="Protocol"
|
|
OptionsSource="{Binding Source={StaticResource ProtocolTypeValues}}"
|
|
Command="{Binding Data.AppendTerminalWithSelectedViewTypeCommand, Source={StaticResource proxy}}"
|
|
CommandParameterType="{x:Type protocol_types:ProtocolType}">
|
|
</controls:CommandableSubMenu>
|
|
</ContextMenu>
|
|
</Button.ContextMenu>
|
|
</Button>
|
|
|
|
<custom_controls:ExtendedTabControl Grid.Row="1" Grid.Column="1"
|
|
x:Name="terminalTabControl"
|
|
ItemsSource="{Binding TerminalViewModels}"
|
|
SelectedItem="{Binding SelectedTerminalViewModel}">
|
|
|
|
<!-- Register additional Tab ViewModels here -->
|
|
<custom_controls:ExtendedTabControl.Resources>
|
|
<DataTemplate DataType="{x:Type vm:SendReceiveViewModel}">
|
|
<v:SendReceiveView/>
|
|
</DataTemplate>
|
|
</custom_controls:ExtendedTabControl.Resources>
|
|
|
|
<custom_controls:ExtendedTabControl.ItemTemplate>
|
|
<!-- Tab Template -->
|
|
<DataTemplate>
|
|
<StackPanel Orientation="Horizontal">
|
|
<TextBlock Text="{Binding Title, Mode=OneWay}" />
|
|
<Button Command="{Binding CloseRequestCommand}" Width="20" Padding="0" Margin="8 0 0 0" Content="X">
|
|
<Button.Style>
|
|
<Style TargetType="Button" x:Name="CloseButtonStyle">
|
|
<Setter Property="Visibility" Value="Visible"/>
|
|
<Setter Property="Background" Value="Transparent"/>
|
|
<Setter Property="BorderBrush" Value="Transparent"/>
|
|
</Style>
|
|
</Button.Style>
|
|
</Button>
|
|
</StackPanel>
|
|
</DataTemplate>
|
|
</custom_controls:ExtendedTabControl.ItemTemplate>
|
|
|
|
<custom_controls:ExtendedTabControl.Triggers>
|
|
<!-- Trigger that opens the context menu, listening on custom routed event AddButtonClicked -->
|
|
<EventTrigger RoutedEvent="custom_controls:ExtendedTabControl.AddButtonClicked">
|
|
<BeginStoryboard>
|
|
<Storyboard>
|
|
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="AddTabContextMenu" Storyboard.TargetProperty="(ContextMenu.IsOpen)">
|
|
<DiscreteObjectKeyFrame KeyTime="0:0:0">
|
|
<DiscreteObjectKeyFrame.Value>
|
|
<sys:Boolean>True</sys:Boolean>
|
|
</DiscreteObjectKeyFrame.Value>
|
|
</DiscreteObjectKeyFrame>
|
|
</ObjectAnimationUsingKeyFrames>
|
|
</Storyboard>
|
|
</BeginStoryboard>
|
|
</EventTrigger>
|
|
</custom_controls:ExtendedTabControl.Triggers>
|
|
</custom_controls:ExtendedTabControl>
|
|
</Grid>
|
|
</DockPanel>
|
|
</UserControl>
|
|
|