Projects STRLCPY NETworkManager Commits 6ae5b272
🤬
  • ■ ■ ■ ■ ■ ■
    Source/NETworkManager/Controls/AWSSessionManagerControl.xaml
    1  -<UserControl x:Class="NETworkManager.Controls.AWSSessionManagerControl"
     1 +<local:UserControlBase x:Class="NETworkManager.Controls.AWSSessionManagerControl"
    2 2   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    3 3   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    4 4   xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    skipped 1 lines
    6 6   xmlns:converters="clr-namespace:NETworkManager.Converters;assembly=NETworkManager.Converters"
    7 7   xmlns:windowsForms="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"
    8 8   xmlns:localization="clr-namespace:NETworkManager.Localization.Resources;assembly=NETworkManager.Localization"
    9  - xmlns:networkManagerControls="clr-namespace:NETworkManager.Controls"
     9 + xmlns:local="clr-namespace:NETworkManager.Controls"
    10 10   xmlns:mah="http://metro.mahapps.com/winfx/xaml/controls"
    11 11   mah:DialogParticipation.Register="{Binding}"
    12  - mc:Ignorable="d" Loaded="UserControl_Loaded" d:DataContext="{d:DesignInstance networkManagerControls:AWSSessionManagerControl}">
    13  - <UserControl.Resources>
     12 + mc:Ignorable="d" Loaded="UserControl_Loaded" d:DataContext="{d:DesignInstance local:AWSSessionManagerControl}">
     13 + <local:UserControlBase.Resources>
    14 14   <converters:BooleanReverseConverter x:Key="BooleanReverseConverter" />
    15 15   <converters:BooleanReverseToVisibilityCollapsedConverter x:Key="BooleanReverseToVisibilityCollapsedConverter" />
    16 16   <converters:BooleanReverseToVisibilityHiddenConverter x:Key="BooleanReverseToVisibilityHiddenConverter" />
    17 17   <converters:BooleanToVisibilityCollapsedConverter x:Key="BooleanToVisibilityCollapsedConverter" />
    18  - </UserControl.Resources>
     18 + </local:UserControlBase.Resources>
    19 19   <Grid SizeChanged="WindowGrid_SizeChanged">
    20 20   <!-- Background color will prevent flickering when app inside the panel is closed -->
    21 21   <WindowsFormsHost Visibility="{Binding IsConnected, Converter={StaticResource BooleanToVisibilityCollapsedConverter}}" Background="{DynamicResource MahApps.Brushes.Window.Background}" Margin="10">
    skipped 13 lines
    35 35   <TextBlock Grid.Row="3" Text="{x:Static localization:Strings.ConnectingDots}" Style="{StaticResource MessageTextBlock}" Visibility="{Binding IsConnecting, Converter={StaticResource BooleanToVisibilityCollapsedConverter}}" />
    36 36   </Grid>
    37 37   </Grid>
    38  -</UserControl>
     38 +</local:UserControlBase>
    39 39   
  • ■ ■ ■ ■ ■
    Source/NETworkManager/Controls/AWSSessionManagerControl.xaml.cs
    skipped 14 lines
    15 15   
    16 16  namespace NETworkManager.Controls;
    17 17   
    18  -public partial class AWSSessionManagerControl : INotifyPropertyChanged
     18 +public partial class AWSSessionManagerControl : UserControlBase
    19 19  {
    20  - #region PropertyChangedEventHandler
    21  - public event PropertyChangedEventHandler PropertyChanged;
    22  - 
    23  - protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    24  - {
    25  - PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    26  - }
    27  - #endregion
    28  - 
    29 20   #region Variables
    30 21   private bool _initialized;
    31 22   private bool _closing; // When the tab is closed --> OnClose()
    skipped 219 lines
  • ■ ■ ■ ■ ■ ■
    Source/NETworkManager/Controls/PowerShellControl.xaml
    1  -<UserControl x:Class="NETworkManager.Controls.PowerShellControl"
     1 +<local:UserControlBase x:Class="NETworkManager.Controls.PowerShellControl"
    2 2   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    3 3   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    4 4   xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    skipped 1 lines
    6 6   xmlns:converters="clr-namespace:NETworkManager.Converters;assembly=NETworkManager.Converters"
    7 7   xmlns:windowsForms="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"
    8 8   xmlns:localization="clr-namespace:NETworkManager.Localization.Resources;assembly=NETworkManager.Localization"
    9  - xmlns:networkManagerControls="clr-namespace:NETworkManager.Controls"
     9 + xmlns:local="clr-namespace:NETworkManager.Controls"
    10 10   xmlns:mah="http://metro.mahapps.com/winfx/xaml/controls"
    11 11   mah:DialogParticipation.Register="{Binding}"
    12  - mc:Ignorable="d" Loaded="UserControl_Loaded" d:DataContext="{d:DesignInstance networkManagerControls:PowerShellControl}">
    13  - <UserControl.Resources>
     12 + mc:Ignorable="d" Loaded="UserControl_Loaded" d:DataContext="{d:DesignInstance local:PowerShellControl}">
     13 + <local:UserControlBase.Resources>
    14 14   <converters:BooleanReverseConverter x:Key="BooleanReverseConverter" />
    15 15   <converters:BooleanReverseToVisibilityCollapsedConverter x:Key="BooleanReverseToVisibilityCollapsedConverter" />
    16 16   <converters:BooleanReverseToVisibilityHiddenConverter x:Key="BooleanReverseToVisibilityHiddenConverter" />
    17 17   <converters:BooleanToVisibilityCollapsedConverter x:Key="BooleanToVisibilityCollapsedConverter" />
    18  - </UserControl.Resources>
     18 + </local:UserControlBase.Resources>
    19 19   <Grid SizeChanged="WindowGrid_SizeChanged">
    20 20   <!-- Background color will prevent flickering when app inside the panel is closed -->
    21 21   <WindowsFormsHost Visibility="{Binding IsConnected, Converter={StaticResource BooleanToVisibilityCollapsedConverter}}" Background="{DynamicResource MahApps.Brushes.Window.Background}" Margin="10">
    skipped 13 lines
    35 35   <TextBlock Grid.Row="3" Text="{x:Static localization:Strings.ConnectingDots}" Style="{StaticResource MessageTextBlock}" Visibility="{Binding IsConnecting, Converter={StaticResource BooleanToVisibilityCollapsedConverter}}" />
    36 36   </Grid>
    37 37   </Grid>
    38  -</UserControl>
     38 +</local:UserControlBase>
    39 39   
  • ■ ■ ■ ■ ■
    Source/NETworkManager/Controls/PowerShellControl.xaml.cs
    1 1  // Contains code from: https://stackoverflow.com/questions/5028598/hosting-external-app-in-wpf-window
    2 2   
    3  -using System.ComponentModel;
    4  -using System.Runtime.CompilerServices;
    5 3  using System.Windows;
    6 4  using System;
    7 5  using System.Windows.Threading;
    skipped 7 lines
    15 13   
    16 14  namespace NETworkManager.Controls;
    17 15   
    18  -public partial class PowerShellControl : INotifyPropertyChanged
     16 +public partial class PowerShellControl : UserControlBase
    19 17  {
    20  - #region PropertyChangedEventHandler
    21  - public event PropertyChangedEventHandler PropertyChanged;
    22  - 
    23  - protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    24  - {
    25  - PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    26  - }
    27  - #endregion
    28  - 
    29 18   #region Variables
    30 19   private bool _initialized;
    31 20   private bool _closing; // When the tab is closed --> OnClose()
    skipped 219 lines
  • ■ ■ ■ ■ ■ ■
    Source/NETworkManager/Controls/PuTTYControl.xaml
    1  -<UserControl x:Class="NETworkManager.Controls.PuTTYControl"
     1 +<local:UserControlBase x:Class="NETworkManager.Controls.PuTTYControl"
    2 2   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    3 3   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    4 4   xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    skipped 1 lines
    6 6   xmlns:converters="clr-namespace:NETworkManager.Converters;assembly=NETworkManager.Converters"
    7 7   xmlns:windowsForms="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"
    8 8   xmlns:localization="clr-namespace:NETworkManager.Localization.Resources;assembly=NETworkManager.Localization"
    9  - xmlns:controls="clr-namespace:NETworkManager.Controls;assembly=NETworkManager"
     9 + xmlns:local="clr-namespace:NETworkManager.Controls"
    10 10   xmlns:mah="http://metro.mahapps.com/winfx/xaml/controls"
    11 11   mah:DialogParticipation.Register="{Binding}"
    12  - mc:Ignorable="d" Loaded="UserControl_Loaded" d:DataContext="{d:DesignInstance controls:PuTTYControl}">
    13  - <UserControl.Resources>
     12 + mc:Ignorable="d" Loaded="UserControl_Loaded" d:DataContext="{d:DesignInstance local:PuTTYControl}">
     13 + <local:UserControlBase.Resources>
    14 14   <converters:BooleanReverseConverter x:Key="BooleanReverseConverter" />
    15 15   <converters:BooleanReverseToVisibilityCollapsedConverter x:Key="BooleanReverseToVisibilityCollapsedConverter" />
    16 16   <converters:BooleanReverseToVisibilityHiddenConverter x:Key="BooleanReverseToVisibilityHiddenConverter" />
    17 17   <converters:BooleanToVisibilityCollapsedConverter x:Key="BooleanToVisibilityCollapsedConverter" />
    18  - </UserControl.Resources>
     18 + </local:UserControlBase.Resources>
    19 19   <Grid SizeChanged="WindowGrid_SizeChanged">
    20 20   <!-- Background color will prevent flickering when app inside the panel is closed -->
    21 21   <WindowsFormsHost Visibility="{Binding IsConnected, Converter={StaticResource BooleanToVisibilityCollapsedConverter}}" Background="{DynamicResource MahApps.Brushes.Window.Background}" Margin="10">
    skipped 13 lines
    35 35   <TextBlock Grid.Row="3" Text="{x:Static localization:Strings.ConnectingDots}" Style="{StaticResource MessageTextBlock}" Visibility="{Binding IsConnecting, Converter={StaticResource BooleanToVisibilityCollapsedConverter}}" />
    36 36   </Grid>
    37 37   </Grid>
    38  -</UserControl>
     38 +</local:UserControlBase>
    39 39   
  • ■ ■ ■ ■ ■
    Source/NETworkManager/Controls/PuTTYControl.xaml.cs
    1 1  // Contains code from: https://stackoverflow.com/questions/5028598/hosting-external-app-in-wpf-window
    2 2   
    3  -using System.ComponentModel;
    4  -using System.Runtime.CompilerServices;
    5 3  using System.Windows;
    6 4  using System;
    7 5  using System.Windows.Threading;
    skipped 8 lines
    16 14   
    17 15  namespace NETworkManager.Controls;
    18 16   
    19  -public partial class PuTTYControl : INotifyPropertyChanged
     17 +public partial class PuTTYControl : UserControlBase
    20 18  {
    21  - #region PropertyChangedEventHandler
    22  - public event PropertyChangedEventHandler PropertyChanged;
    23  - 
    24  - protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    25  - {
    26  - PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    27  - }
    28  - #endregion
    29  - 
    30 19   #region Variables
    31 20   private bool _initialized;
    32 21   private bool _closing; // When the tab is closed --> OnClose()
    skipped 238 lines
  • ■ ■ ■ ■ ■ ■
    Source/NETworkManager/Controls/RemoteDesktopControl.xaml
    1  -<UserControl x:Class="NETworkManager.Controls.RemoteDesktopControl"
     1 +<local:UserControlBase x:Class="NETworkManager.Controls.RemoteDesktopControl"
    2 2   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    3 3   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    4 4   xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    skipped 2 lines
    7 7   xmlns:converters="clr-namespace:NETworkManager.Converters;assembly=NETworkManager.Converters"
    8 8   xmlns:mah="http://metro.mahapps.com/winfx/xaml/controls"
    9 9   xmlns:localization="clr-namespace:NETworkManager.Localization.Resources;assembly=NETworkManager.Localization"
    10  - xmlns:networkManagerControls="clr-namespace:NETworkManager.Controls;assembly=NETworkManager"
    11  - mc:Ignorable="d" Loaded="UserControl_Loaded" d:DataContext="{d:DesignInstance networkManagerControls:RemoteDesktopControl}">
    12  - <UserControl.Resources>
     10 + xmlns:local="clr-namespace:NETworkManager.Controls"
     11 + mc:Ignorable="d" Loaded="UserControl_Loaded" d:DataContext="{d:DesignInstance local:RemoteDesktopControl}">
     12 + <local:UserControlBase.Resources>
    13 13   <converters:BooleanReverseConverter x:Key="BooleanReverseConverter" />
    14 14   <converters:BooleanReverseToVisibilityCollapsedConverter x:Key="BooleanReverseToVisibilityCollapsedConverter" />
    15 15   <converters:BooleanReverseToVisibilityHiddenConverter x:Key="BooleanReverseToVisibilityHiddenConverter" />
    16 16   <converters:BooleanToVisibilityCollapsedConverter x:Key="BooleanToVisibilityCollapsedConverter" />
    17  - </UserControl.Resources>
     17 + </local:UserControlBase.Resources>
    18 18   <Grid x:Name="RdpGrid" SizeChanged="RdpGrid_SizeChanged">
    19 19   <WindowsFormsHost MaxWidth="{Binding RdpClientWidth, Mode=OneWay}" MaxHeight="{Binding RdpClientHeight, Mode=OneWay}">
    20 20   <WindowsFormsHost.Style>
    skipped 35 lines
    56 56   </Grid>
    57 57   
    58 58   </Grid>
    59  -</UserControl>
     59 +</local:UserControlBase>
    60 60   
  • ■ ■ ■ ■ ■
    Source/NETworkManager/Controls/RemoteDesktopControl.xaml.cs
    1 1  // Documenation: https://docs.microsoft.com/en-us/windows/desktop/termserv/remote-desktop-web-connection-reference
    2 2   
    3 3  using NETworkManager.Models.RemoteDesktop;
    4  -using System.ComponentModel;
    5  -using System.Runtime.CompilerServices;
    6 4  using System.Windows;
    7 5  using System.Windows.Input;
    8 6  using System;
    skipped 2 lines
    11 9   
    12 10  namespace NETworkManager.Controls;
    13 11   
    14  -public partial class RemoteDesktopControl : INotifyPropertyChanged
     12 +public partial class RemoteDesktopControl : UserControlBase
    15 13  {
    16  - #region PropertyChangedEventHandler
    17  - public event PropertyChangedEventHandler PropertyChanged;
    18  - 
    19  - protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    20  - {
    21  - PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    22  - }
    23  - #endregion
    24  - 
    25 14   #region Variables
    26 15   private bool _initialized;
    27 16   
    skipped 441 lines
  • ■ ■ ■ ■ ■ ■
    Source/NETworkManager/Controls/TightVNCControl.xaml
    1  -<UserControl x:Class="NETworkManager.Controls.TigerVNCControl"
     1 +<local:UserControlBase x:Class="NETworkManager.Controls.TigerVNCControl"
    2 2   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    3 3   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    4 4   xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    skipped 1 lines
    6 6   xmlns:converters="clr-namespace:NETworkManager.Converters;assembly=NETworkManager.Converters"
    7 7   xmlns:windowsForms="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"
    8 8   xmlns:localization="clr-namespace:NETworkManager.Localization.Resources;assembly=NETworkManager.Localization"
    9  - xmlns:networkManagerControls="clr-namespace:NETworkManager.Controls;assembly=NETworkManager"
     9 + xmlns:local="clr-namespace:NETworkManager.Controls"
    10 10   xmlns:mah="http://metro.mahapps.com/winfx/xaml/controls"
    11 11   mah:DialogParticipation.Register="{Binding}"
    12  - mc:Ignorable="d" Loaded="UserControl_Loaded" d:DataContext="{d:DesignInstance networkManagerControls:TigerVNCControl}">
    13  - <UserControl.Resources>
     12 + mc:Ignorable="d" Loaded="UserControl_Loaded" d:DataContext="{d:DesignInstance local:TigerVNCControl}">
     13 + <local:UserControlBase.Resources>
    14 14   <converters:BooleanReverseConverter x:Key="BooleanReverseConverter" />
    15 15   <converters:BooleanReverseToVisibilityCollapsedConverter x:Key="BooleanReverseToVisibilityCollapsedConverter" />
    16 16   <converters:BooleanReverseToVisibilityHiddenConverter x:Key="BooleanReverseToVisibilityHiddenConverter" />
    17 17   <converters:BooleanToVisibilityCollapsedConverter x:Key="BooleanToVisibilityCollapsedConverter" />
    18  - </UserControl.Resources>
     18 + </local:UserControlBase.Resources>
    19 19   <Grid SizeChanged="TigerVNCGrid_SizeChanged">
    20 20   <!-- Background color will prevent flickering when app inside the panel is closed -->
    21 21   <WindowsFormsHost Visibility="{Binding IsConnected, Converter={StaticResource BooleanToVisibilityCollapsedConverter}}" Background="{DynamicResource MahApps.Brushes.Window.Background}">
    skipped 13 lines
    35 35   <TextBlock Grid.Row="3" Text="{x:Static localization:Strings.ConnectingDots}" Style="{StaticResource MessageTextBlock}" Visibility="{Binding IsConnecting, Converter={StaticResource BooleanToVisibilityCollapsedConverter}}" />
    36 36   </Grid>
    37 37   </Grid>
    38  -</UserControl>
     38 +</local:UserControlBase>
    39 39   
  • ■ ■ ■ ■ ■
    Source/NETworkManager/Controls/TightVNCControl.xaml.cs
    1 1  // Contains code from: https://stackoverflow.com/questions/5028598/hosting-external-app-in-wpf-window
    2 2   
    3  -using System.ComponentModel;
    4  -using System.Runtime.CompilerServices;
    5 3  using System.Windows;
    6 4  using System;
    7 5  using System.Windows.Threading;
    skipped 7 lines
    15 13   
    16 14  namespace NETworkManager.Controls;
    17 15   
    18  -public partial class TigerVNCControl : INotifyPropertyChanged
     16 +public partial class TigerVNCControl : UserControlBase
    19 17  {
    20  - #region PropertyChangedEventHandler
    21  - public event PropertyChangedEventHandler PropertyChanged;
    22  - 
    23  - protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    24  - {
    25  - PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    26  - }
    27  - #endregion
    28  - 
    29 18   #region Variables
    30 19   private bool _initialized;
    31 20   private bool _closing; // When the tab is closed --> OnClose()
    skipped 223 lines
  • ■ ■ ■ ■ ■ ■
    Source/NETworkManager/Controls/UserControlBase.cs
     1 +using System.ComponentModel;
     2 +using System.Runtime.CompilerServices;
     3 +using System.Windows.Controls;
     4 + 
     5 +namespace NETworkManager.Controls
     6 +{
     7 + public abstract class UserControlBase : UserControl, INotifyPropertyChanged
     8 + {
     9 + #region PropertyChangedEventHandler
     10 + public event PropertyChangedEventHandler PropertyChanged;
     11 + 
     12 + protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
     13 + {
     14 + PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
     15 + }
     16 + #endregion
     17 + }
     18 +}
     19 + 
  • ■ ■ ■ ■ ■ ■
    Source/NETworkManager/Controls/WebConsoleControl.xaml
    1  -<UserControl x:Class="NETworkManager.Controls.WebConsoleControl"
     1 +<local:UserControlBase x:Class="NETworkManager.Controls.WebConsoleControl"
    2 2   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    3 3   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    4 4   xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    5 5   xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    6  - xmlns:networkManagerControls="clr-namespace:NETworkManager.Controls;assembly=NETworkManager"
     6 + xmlns:local="clr-namespace:NETworkManager.Controls"
    7 7   xmlns:mah="http://metro.mahapps.com/winfx/xaml/controls"
    8 8   xmlns:localization="clr-namespace:NETworkManager.Localization.Resources;assembly=NETworkManager.Localization"
    9 9   xmlns:validators="clr-namespace:NETworkManager.Validators;assembly=NETworkManager.Validators"
    skipped 1 lines
    11 11   xmlns:iconPacks="http://metro.mahapps.com/winfx/xaml/iconpacks"
    12 12   xmlns:webview="clr-namespace:Microsoft.Web.WebView2.Wpf;assembly=Microsoft.Web.WebView2.Wpf"
    13 13   mah:DialogParticipation.Register="{Binding}"
    14  - mc:Ignorable="d" Loaded="UserControl_Loaded" d:DataContext="{d:DesignInstance networkManagerControls:WebConsoleControl}">
    15  - <UserControl.Resources>
     14 + mc:Ignorable="d" Loaded="UserControl_Loaded" d:DataContext="{d:DesignInstance local:WebConsoleControl}">
     15 + <local:UserControlBase.Resources>
    16 16   <converters:BooleanReverseConverter x:Key="BooleanReverseConverter" />
    17 17   <converters:BooleanReverseToVisibilityCollapsedConverter x:Key="BooleanReverseToVisibilityCollapsedConverter" />
    18 18   <converters:BooleanToVisibilityCollapsedConverter x:Key="BooleanToVisibilityCollapsedConverter" />
    19 19   <converters:BooleanToVisibilityHiddenConverter x:Key="BooleanToVisibilityHiddenConverter" />
    20  - </UserControl.Resources>
     20 + </local:UserControlBase.Resources>
    21 21   <Grid>
    22 22   <Grid.RowDefinitions>
    23 23   <RowDefinition Height="Auto" />
    skipped 133 lines
    157 157   </webview:WebView2.Style>
    158 158   </webview:WebView2>
    159 159   </Grid>
    160  -</UserControl>
     160 +</local:UserControlBase>
    161 161   
  • ■ ■ ■ ■ ■
    Source/NETworkManager/Controls/WebConsoleControl.xaml.cs
    1 1  using System.ComponentModel;
    2  -using System.Runtime.CompilerServices;
    3 2  using System.Windows;
    4 3  using System;
    5 4  using System.Windows.Threading;
    skipped 5 lines
    11 10   
    12 11  namespace NETworkManager.Controls;
    13 12   
    14  -public partial class WebConsoleControl : INotifyPropertyChanged
     13 +public partial class WebConsoleControl : UserControlBase
    15 14  {
    16  - #region PropertyChangedEventHandler
    17  - public event PropertyChangedEventHandler PropertyChanged;
    18  - 
    19  - protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    20  - {
    21  - PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    22  - }
    23  - #endregion
    24  - 
    25 15   #region Variables
    26 16   private bool _initialized;
    27 17   
    skipped 81 lines
    109 99   _initialized = true;
    110 100   }
    111 101   #endregion
    112  - 
    113 102  
    114 103   #region ICommands & Actions
    115 104   
    skipped 94 lines
  • ■ ■ ■ ■ ■ ■
    Source/NETworkManager/MainWindow.xaml
    skipped 6 lines
    7 7   xmlns:mah="http://metro.mahapps.com/winfx/xaml/controls"
    8 8   xmlns:iconPacks="http://metro.mahapps.com/winfx/xaml/iconpacks"
    9 9   xmlns:interactivity="http://schemas.microsoft.com/xaml/behaviors"
     10 + xmlns:asf="clr-namespace:AirspaceFixer;assembly=AirspaceFixer"
    10 11   xmlns:localization="clr-namespace:NETworkManager.Localization.Resources;assembly=NETworkManager.Localization"
    11 12   xmlns:settings="clr-namespace:NETworkManager.Settings;assembly=NETworkManager.Settings"
    12 13   xmlns:resources="clr-namespace:NETworkManager.Properties"
    skipped 181 lines
    194 195   <ColumnDefinition Width="Auto" />
    195 196   <ColumnDefinition Width="*" />
    196 197   </Grid.ColumnDefinitions>
    197  - <Border Grid.Column="0" BorderBrush="{DynamicResource MahApps.Brushes.Gray8}" BorderThickness="0,0,1,0">
     198 + <Border Grid.Column="0" Grid.Row="0" BorderBrush="{DynamicResource MahApps.Brushes.Gray8}" BorderThickness="0,0,1,0">
    198 199   <Grid x:Name="ApplicationViewGrid">
    199 200   <Grid.RowDefinitions>
    200 201   <!-- 1 = Search, 2 = ApplicationList, 3 = Settings-->
    skipped 466 lines
    667 668   </interactivity:Interaction.Triggers>
    668 669   </Grid>
    669 670   </Border>
    670  - <ContentControl x:Name="ContentControlApplication" Grid.Column="1" />
     671 + <asf:AirspacePanel Grid.Column="1" Grid.Row="0" FixAirspace="{Binding Source={x:Static settings:ConfigurationManager.Current}, Path=IsDialogOpen}">
     672 + <ContentControl x:Name="ContentControlApplication" />
     673 + </asf:AirspacePanel>
    671 674   </Grid>
    672 675   <Grid>
    673 676   <Grid.Style>
    skipped 63 lines
  • ■ ■ ■ ■ ■
    Source/NETworkManager/ViewModels/ViewModelBase.cs
    1  -using System.ComponentModel;
    2  -using System.Runtime.CompilerServices;
     1 +using NETworkManager.Utilities;
    3 2   
    4 3  namespace NETworkManager.ViewModels;
    5 4   
    6  -public abstract class ViewModelBase : INotifyPropertyChanged
     5 +public abstract class ViewModelBase : PropertyChangedBase
    7 6  {
    8  - public event PropertyChangedEventHandler PropertyChanged;
    9 7   
    10  - protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    11  - {
    12  - PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    13  - }
    14 8  }
    15 9   
  • ■ ■ ■ ■ ■ ■
    Source/NETworkManager/Views/AWSSessionManagerHostView.xaml
    skipped 5 lines
    6 6   xmlns:dragablz="clr-namespace:Dragablz;assembly=Dragablz"
    7 7   xmlns:iconPacks="http://metro.mahapps.com/winfx/xaml/iconpacks"
    8 8   xmlns:converters="clr-namespace:NETworkManager.Converters;assembly=NETworkManager.Converters"
    9  - xmlns:airspaceFixer="clr-namespace:AirspaceFixer;assembly=AirspaceFixer"
    10 9   xmlns:wpfHelpers="clr-namespace:NETworkManager.Utilities.WPF;assembly=NETworkManager.Utilities.WPF"
    11 10   xmlns:dialogs="clr-namespace:MahApps.Metro.Controls.Dialogs;assembly=MahApps.Metro"
    12 11   xmlns:viewModels="clr-namespace:NETworkManager.ViewModels"
    skipped 37 lines
    50 49   <ColumnDefinition Width="Auto" />
    51 50   <ColumnDefinition MinWidth="{x:Static settings:GlobalStaticConfiguration.Profile_WidthCollapsed}" Width="{Binding ProfileWidth, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" MaxWidth="{x:Static settings:GlobalStaticConfiguration.Profile_MaxWidthExpanded}" />
    52 51   </Grid.ColumnDefinitions>
    53  - <airspaceFixer:AirspacePanel Grid.Column="0" Grid.Row="0" FixAirspace="{Binding Source={x:Static settings:ConfigurationManager.Current}, Path=IsDialogOpen}">
    54  - <dragablz:TabablzControl ClosingItemCallback="{Binding CloseItemCommand}" ItemsSource="{Binding TabItems}" SelectedItem="{Binding SelectedTabItem}" Visibility="{Binding Source={x:Static settings:ConfigurationManager.Current}, Path=IsDialogOpen, Converter={StaticResource BooleanReverseToVisibilityCollapsedConverter}}">
    55  - <dragablz:TabablzControl.Resources>
    56  - <wpfHelpers:BindingProxy x:Key="BindingProxy" Data="{Binding}" />
    57  - </dragablz:TabablzControl.Resources>
    58  - <dragablz:TabablzControl.InterTabController>
    59  - <dragablz:InterTabController InterTabClient="{Binding InterTabClient}" MoveWindowWithSolitaryTabs="False" x:Name="InterTabController" />
    60  - </dragablz:TabablzControl.InterTabController>
    61  - <dragablz:TabablzControl.HeaderSuffixContent>
    62  - <Grid HorizontalAlignment="Right" Width="32" Height="32">
    63  - <Button Style="{StaticResource CleanButton}" Command="{Binding ConnectCommand}" ToolTip="{x:Static localization:Strings.NewConnectionDots}" Focusable="False">
    64  - <Rectangle Width="16" Height="16">
    65  - <Rectangle.OpacityMask>
    66  - <VisualBrush Stretch="Fill" Visual="{iconPacks:Material Kind=Plus}" />
    67  - </Rectangle.OpacityMask>
    68  - <Rectangle.Style>
    69  - <Style TargetType="{x:Type Rectangle}">
    70  - <Setter Property="Fill" Value="{DynamicResource MahApps.Brushes.Gray3}" />
    71  - <Style.Triggers>
    72  - <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Button}}, Path=IsMouseOver}" Value="True">
    73  - <Setter Property="Fill" Value="{DynamicResource MahApps.Brushes.Gray5}" />
    74  - </DataTrigger>
    75  - </Style.Triggers>
    76  - </Style>
    77  - </Rectangle.Style>
    78  - </Rectangle>
    79  - </Button>
    80  - </Grid>
    81  - </dragablz:TabablzControl.HeaderSuffixContent>
    82  - <dragablz:TabablzControl.HeaderItemTemplate>
    83  - <DataTemplate DataType="controls:DragablzTabItem">
    84  - <Border BorderBrush="{DynamicResource MahApps.Brushes.Gray8}" BorderThickness="0,0,1,0">
    85  - <Grid Height="32">
    86  - <Grid.ContextMenu>
    87  - <ContextMenu IsOpen="{Binding Data.HeaderContextMenuIsOpen, Source={StaticResource BindingProxy}, Mode=OneWayToSource}">
    88  - <MenuItem Header="{x:Static localization:Strings.Reconnect}" Command="{Binding Data.ReconnectCommand, Source={StaticResource BindingProxy}}" CommandParameter="{Binding View}">
    89  - <MenuItem.Icon>
    90  - <Rectangle Width="16" Height="16" Fill="{DynamicResource MahApps.Brushes.Gray3}">
    91  - <Rectangle.OpacityMask>
    92  - <VisualBrush Stretch="Uniform" Visual="{iconPacks:Material Kind=Restart}" />
    93  - </Rectangle.OpacityMask>
    94  - </Rectangle>
    95  - </MenuItem.Icon>
    96  - </MenuItem>
    97  - <Separator />
    98  - <MenuItem Header="{x:Static localization:Strings.Resize}" Command="{Binding Data.ResizeWindowCommand, Source={StaticResource BindingProxy}}" CommandParameter="{Binding View}">
    99  - <MenuItem.Icon>
    100  - <Rectangle Width="16" Height="16" Fill="{DynamicResource MahApps.Brushes.Gray3}">
    101  - <Rectangle.OpacityMask>
    102  - <VisualBrush Stretch="Uniform" Visual="{iconPacks:Modern Kind=ArrowExpand}" />
    103  - </Rectangle.OpacityMask>
    104  - </Rectangle>
    105  - </MenuItem.Icon>
    106  - </MenuItem>
    107  - </ContextMenu>
    108  - </Grid.ContextMenu>
    109  - <Grid.InputBindings>
    110  - <MouseBinding Command="dragablz:TabablzControl.CloseItemCommand" Gesture="MiddleClick" />
    111  - </Grid.InputBindings>
    112  - <StackPanel Orientation="Horizontal">
    113  - <Grid ToolTip="{Binding Header}">
    114  - <TextBlock Text="{Binding Header}" Width="150" Margin="10,0" VerticalAlignment="Center">
    115  - <TextBlock.Style>
    116  - <Style TargetType="{x:Type TextBlock}" BasedOn="{StaticResource HeaderTextBlock}">
    117  - <Setter Property="Foreground" Value="{DynamicResource MahApps.Brushes.Gray3}" />
    118  - <Style.Triggers>
    119  - <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type dragablz:DragablzItem}}, Path=IsMouseOver}" Value="True">
    120  - <Setter Property="Foreground" Value="{DynamicResource MahApps.Brushes.Gray5}" />
    121  - </DataTrigger>
    122  - <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type dragablz:DragablzItem}}, Path=IsSelected}" Value="True">
    123  - <Setter Property="Foreground" Value="{DynamicResource MahApps.Brushes.Accent}" />
    124  - </DataTrigger>
    125  - </Style.Triggers>
    126  - </Style>
    127  - </TextBlock.Style>
    128  - </TextBlock>
    129  - <Thumb Style="{DynamicResource InvisibleThumbStyle}" dragablz:DragablzItem.IsCustomThumb="True" />
    130  - </Grid>
    131  - <Button Style="{StaticResource CleanButton}" Command="dragablz:TabablzControl.CloseItemCommand" ToolTip="{x:Static localization:Strings.Close}" Margin="0,0,10,0">
    132  - <Rectangle Width="16" Height="16">
    133  - <Rectangle.OpacityMask>
    134  - <VisualBrush Stretch="Uniform" Visual="{iconPacks:Material Kind=WindowClose}" />
    135  - </Rectangle.OpacityMask>
    136  - <Rectangle.Style>
    137  - <Style TargetType="{x:Type Rectangle}">
    138  - <Setter Property="Fill" Value="{DynamicResource MahApps.Brushes.Gray3}" />
    139  - <Style.Triggers>
    140  - <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Button}}, Path=IsMouseOver}" Value="True">
    141  - <Setter Property="Fill" Value="Red" />
    142  - </DataTrigger>
    143  - </Style.Triggers>
    144  - </Style>
    145  - </Rectangle.Style>
    146  - </Rectangle>
    147  - </Button>
    148  - </StackPanel>
    149  - </Grid>
    150  - </Border>
    151  - </DataTemplate>
    152  - </dragablz:TabablzControl.HeaderItemTemplate>
    153  - </dragablz:TabablzControl>
    154  - </airspaceFixer:AirspacePanel>
     52 + <dragablz:TabablzControl Grid.Column="0" Grid.Row="0" ClosingItemCallback="{Binding CloseItemCommand}" ItemsSource="{Binding TabItems}" SelectedItem="{Binding SelectedTabItem}" Visibility="{Binding Source={x:Static settings:ConfigurationManager.Current}, Path=IsDialogOpen, Converter={StaticResource BooleanReverseToVisibilityCollapsedConverter}}">
     53 + <dragablz:TabablzControl.Resources>
     54 + <wpfHelpers:BindingProxy x:Key="BindingProxy" Data="{Binding}" />
     55 + </dragablz:TabablzControl.Resources>
     56 + <dragablz:TabablzControl.InterTabController>
     57 + <dragablz:InterTabController InterTabClient="{Binding InterTabClient}" MoveWindowWithSolitaryTabs="False" x:Name="InterTabController" />
     58 + </dragablz:TabablzControl.InterTabController>
     59 + <dragablz:TabablzControl.HeaderSuffixContent>
     60 + <Grid HorizontalAlignment="Right" Width="32" Height="32">
     61 + <Button Style="{StaticResource CleanButton}" Command="{Binding ConnectCommand}" ToolTip="{x:Static localization:Strings.NewConnectionDots}" Focusable="False">
     62 + <Rectangle Width="16" Height="16">
     63 + <Rectangle.OpacityMask>
     64 + <VisualBrush Stretch="Fill" Visual="{iconPacks:Material Kind=Plus}" />
     65 + </Rectangle.OpacityMask>
     66 + <Rectangle.Style>
     67 + <Style TargetType="{x:Type Rectangle}">
     68 + <Setter Property="Fill" Value="{DynamicResource MahApps.Brushes.Gray3}" />
     69 + <Style.Triggers>
     70 + <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Button}}, Path=IsMouseOver}" Value="True">
     71 + <Setter Property="Fill" Value="{DynamicResource MahApps.Brushes.Gray5}" />
     72 + </DataTrigger>
     73 + </Style.Triggers>
     74 + </Style>
     75 + </Rectangle.Style>
     76 + </Rectangle>
     77 + </Button>
     78 + </Grid>
     79 + </dragablz:TabablzControl.HeaderSuffixContent>
     80 + <dragablz:TabablzControl.HeaderItemTemplate>
     81 + <DataTemplate DataType="controls:DragablzTabItem">
     82 + <Border BorderBrush="{DynamicResource MahApps.Brushes.Gray8}" BorderThickness="0,0,1,0">
     83 + <Grid Height="32">
     84 + <Grid.ContextMenu>
     85 + <ContextMenu IsOpen="{Binding Data.HeaderContextMenuIsOpen, Source={StaticResource BindingProxy}, Mode=OneWayToSource}">
     86 + <MenuItem Header="{x:Static localization:Strings.Reconnect}" Command="{Binding Data.ReconnectCommand, Source={StaticResource BindingProxy}}" CommandParameter="{Binding View}">
     87 + <MenuItem.Icon>
     88 + <Rectangle Width="16" Height="16" Fill="{DynamicResource MahApps.Brushes.Gray3}">
     89 + <Rectangle.OpacityMask>
     90 + <VisualBrush Stretch="Uniform" Visual="{iconPacks:Material Kind=Restart}" />
     91 + </Rectangle.OpacityMask>
     92 + </Rectangle>
     93 + </MenuItem.Icon>
     94 + </MenuItem>
     95 + <Separator />
     96 + <MenuItem Header="{x:Static localization:Strings.Resize}" Command="{Binding Data.ResizeWindowCommand, Source={StaticResource BindingProxy}}" CommandParameter="{Binding View}">
     97 + <MenuItem.Icon>
     98 + <Rectangle Width="16" Height="16" Fill="{DynamicResource MahApps.Brushes.Gray3}">
     99 + <Rectangle.OpacityMask>
     100 + <VisualBrush Stretch="Uniform" Visual="{iconPacks:Modern Kind=ArrowExpand}" />
     101 + </Rectangle.OpacityMask>
     102 + </Rectangle>
     103 + </MenuItem.Icon>
     104 + </MenuItem>
     105 + </ContextMenu>
     106 + </Grid.ContextMenu>
     107 + <Grid.InputBindings>
     108 + <MouseBinding Command="dragablz:TabablzControl.CloseItemCommand" Gesture="MiddleClick" />
     109 + </Grid.InputBindings>
     110 + <StackPanel Orientation="Horizontal">
     111 + <Grid ToolTip="{Binding Header}">
     112 + <TextBlock Text="{Binding Header}" Width="150" Margin="10,0" VerticalAlignment="Center">
     113 + <TextBlock.Style>
     114 + <Style TargetType="{x:Type TextBlock}" BasedOn="{StaticResource HeaderTextBlock}">
     115 + <Setter Property="Foreground" Value="{DynamicResource MahApps.Brushes.Gray3}" />
     116 + <Style.Triggers>
     117 + <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type dragablz:DragablzItem}}, Path=IsMouseOver}" Value="True">
     118 + <Setter Property="Foreground" Value="{DynamicResource MahApps.Brushes.Gray5}" />
     119 + </DataTrigger>
     120 + <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type dragablz:DragablzItem}}, Path=IsSelected}" Value="True">
     121 + <Setter Property="Foreground" Value="{DynamicResource MahApps.Brushes.Accent}" />
     122 + </DataTrigger>
     123 + </Style.Triggers>
     124 + </Style>
     125 + </TextBlock.Style>
     126 + </TextBlock>
     127 + <Thumb Style="{DynamicResource InvisibleThumbStyle}" dragablz:DragablzItem.IsCustomThumb="True" />
     128 + </Grid>
     129 + <Button Style="{StaticResource CleanButton}" Command="dragablz:TabablzControl.CloseItemCommand" ToolTip="{x:Static localization:Strings.Close}" Margin="0,0,10,0">
     130 + <Rectangle Width="16" Height="16">
     131 + <Rectangle.OpacityMask>
     132 + <VisualBrush Stretch="Uniform" Visual="{iconPacks:Material Kind=WindowClose}" />
     133 + </Rectangle.OpacityMask>
     134 + <Rectangle.Style>
     135 + <Style TargetType="{x:Type Rectangle}">
     136 + <Setter Property="Fill" Value="{DynamicResource MahApps.Brushes.Gray3}" />
     137 + <Style.Triggers>
     138 + <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Button}}, Path=IsMouseOver}" Value="True">
     139 + <Setter Property="Fill" Value="Red" />
     140 + </DataTrigger>
     141 + </Style.Triggers>
     142 + </Style>
     143 + </Rectangle.Style>
     144 + </Rectangle>
     145 + </Button>
     146 + </StackPanel>
     147 + </Grid>
     148 + </Border>
     149 + </DataTemplate>
     150 + </dragablz:TabablzControl.HeaderItemTemplate>
     151 + </dragablz:TabablzControl>
    155 152   <Grid Grid.Column="0" VerticalAlignment="Center">
    156 153   <Grid.Style>
    157 154   <Style TargetType="{x:Type Grid}">
    skipped 506 lines
  • ■ ■ ■ ■ ■ ■
    Source/NETworkManager/Views/PowerShellHostView.xaml
    skipped 5 lines
    6 6   xmlns:dragablz="clr-namespace:Dragablz;assembly=Dragablz"
    7 7   xmlns:iconPacks="http://metro.mahapps.com/winfx/xaml/iconpacks"
    8 8   xmlns:converters="clr-namespace:NETworkManager.Converters;assembly=NETworkManager.Converters"
    9  - xmlns:airspaceFixer="clr-namespace:AirspaceFixer;assembly=AirspaceFixer"
    10 9   xmlns:wpfHelpers="clr-namespace:NETworkManager.Utilities.WPF;assembly=NETworkManager.Utilities.WPF"
    11 10   xmlns:dialogs="clr-namespace:MahApps.Metro.Controls.Dialogs;assembly=MahApps.Metro"
    12 11   xmlns:viewModels="clr-namespace:NETworkManager.ViewModels"
    skipped 28 lines
    41 40   <ColumnDefinition Width="Auto" />
    42 41   <ColumnDefinition MinWidth="{x:Static settings:GlobalStaticConfiguration.Profile_WidthCollapsed}" Width="{Binding ProfileWidth, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" MaxWidth="{x:Static settings:GlobalStaticConfiguration.Profile_MaxWidthExpanded}" />
    43 42   </Grid.ColumnDefinitions>
    44  - <airspaceFixer:AirspacePanel Grid.Column="0" Grid.Row="0" FixAirspace="{Binding Source={x:Static settings:ConfigurationManager.Current}, Path=IsDialogOpen}">
    45  - <dragablz:TabablzControl ClosingItemCallback="{Binding CloseItemCommand}" ItemsSource="{Binding TabItems}" SelectedItem="{Binding SelectedTabItem}" Visibility="{Binding Source={x:Static settings:ConfigurationManager.Current}, Path=IsDialogOpen, Converter={StaticResource BooleanReverseToVisibilityCollapsedConverter}}">
    46  - <dragablz:TabablzControl.Resources>
    47  - <wpfHelpers:BindingProxy x:Key="BindingProxy" Data="{Binding}" />
    48  - </dragablz:TabablzControl.Resources>
    49  - <dragablz:TabablzControl.InterTabController>
    50  - <dragablz:InterTabController InterTabClient="{Binding InterTabClient}" MoveWindowWithSolitaryTabs="False" x:Name="InterTabController" />
    51  - </dragablz:TabablzControl.InterTabController>
    52  - <dragablz:TabablzControl.HeaderSuffixContent>
    53  - <Grid HorizontalAlignment="Right" Width="32" Height="32">
    54  - <Button Style="{StaticResource CleanButton}" Command="{Binding ConnectCommand}" ToolTip="{x:Static localization:Strings.NewConnectionDots}" Focusable="False">
    55  - <Rectangle Width="16" Height="16">
    56  - <Rectangle.OpacityMask>
    57  - <VisualBrush Stretch="Fill" Visual="{iconPacks:Material Kind=Plus}" />
    58  - </Rectangle.OpacityMask>
    59  - <Rectangle.Style>
    60  - <Style TargetType="{x:Type Rectangle}">
    61  - <Setter Property="Fill" Value="{DynamicResource MahApps.Brushes.Gray3}" />
    62  - <Style.Triggers>
    63  - <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Button}}, Path=IsMouseOver}" Value="True">
    64  - <Setter Property="Fill" Value="{DynamicResource MahApps.Brushes.Gray5}" />
    65  - </DataTrigger>
    66  - </Style.Triggers>
    67  - </Style>
    68  - </Rectangle.Style>
    69  - </Rectangle>
    70  - </Button>
    71  - </Grid>
    72  - </dragablz:TabablzControl.HeaderSuffixContent>
    73  - <dragablz:TabablzControl.HeaderItemTemplate>
    74  - <DataTemplate DataType="controls:DragablzTabItem">
    75  - <Border BorderBrush="{DynamicResource MahApps.Brushes.Gray8}" BorderThickness="0,0,1,0">
    76  - <Grid Height="32">
    77  - <Grid.ContextMenu>
    78  - <ContextMenu IsOpen="{Binding Data.HeaderContextMenuIsOpen, Source={StaticResource BindingProxy}, Mode=OneWayToSource}">
    79  - <MenuItem Header="{x:Static localization:Strings.Reconnect}" Command="{Binding Data.ReconnectCommand, Source={StaticResource BindingProxy}}" CommandParameter="{Binding View}">
    80  - <MenuItem.Icon>
    81  - <Rectangle Width="16" Height="16" Fill="{DynamicResource MahApps.Brushes.Gray3}">
    82  - <Rectangle.OpacityMask>
    83  - <VisualBrush Stretch="Uniform" Visual="{iconPacks:Material Kind=Restart}" />
    84  - </Rectangle.OpacityMask>
    85  - </Rectangle>
    86  - </MenuItem.Icon>
    87  - </MenuItem>
    88  - <Separator />
    89  - <MenuItem Header="{x:Static localization:Strings.Resize}" Command="{Binding Data.ResizeWindowCommand, Source={StaticResource BindingProxy}}" CommandParameter="{Binding View}">
    90  - <MenuItem.Icon>
    91  - <Rectangle Width="16" Height="16" Fill="{DynamicResource MahApps.Brushes.Gray3}">
    92  - <Rectangle.OpacityMask>
    93  - <VisualBrush Stretch="Uniform" Visual="{iconPacks:Modern Kind=ArrowExpand}" />
    94  - </Rectangle.OpacityMask>
    95  - </Rectangle>
    96  - </MenuItem.Icon>
    97  - </MenuItem>
    98  - </ContextMenu>
    99  - </Grid.ContextMenu>
    100  - <Grid.InputBindings>
    101  - <MouseBinding Command="dragablz:TabablzControl.CloseItemCommand" Gesture="MiddleClick" />
    102  - </Grid.InputBindings>
    103  - <StackPanel Orientation="Horizontal">
    104  - <Grid ToolTip="{Binding Header}">
    105  - <TextBlock Text="{Binding Header}" Width="150" Margin="10,0" VerticalAlignment="Center">
    106  - <TextBlock.Style>
    107  - <Style TargetType="{x:Type TextBlock}" BasedOn="{StaticResource HeaderTextBlock}">
    108  - <Setter Property="Foreground" Value="{DynamicResource MahApps.Brushes.Gray3}" />
    109  - <Style.Triggers>
    110  - <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type dragablz:DragablzItem}}, Path=IsMouseOver}" Value="True">
    111  - <Setter Property="Foreground" Value="{DynamicResource MahApps.Brushes.Gray5}" />
    112  - </DataTrigger>
    113  - <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type dragablz:DragablzItem}}, Path=IsSelected}" Value="True">
    114  - <Setter Property="Foreground" Value="{DynamicResource MahApps.Brushes.Accent}" />
    115  - </DataTrigger>
    116  - </Style.Triggers>
    117  - </Style>
    118  - </TextBlock.Style>
    119  - </TextBlock>
    120  - <Thumb Style="{DynamicResource InvisibleThumbStyle}" dragablz:DragablzItem.IsCustomThumb="True" />
    121  - </Grid>
    122  - <Button Style="{StaticResource CleanButton}" Command="dragablz:TabablzControl.CloseItemCommand" ToolTip="{x:Static localization:Strings.Close}" Margin="0,0,10,0">
    123  - <Rectangle Width="16" Height="16">
    124  - <Rectangle.OpacityMask>
    125  - <VisualBrush Stretch="Uniform" Visual="{iconPacks:Material Kind=WindowClose}" />
    126  - </Rectangle.OpacityMask>
    127  - <Rectangle.Style>
    128  - <Style TargetType="{x:Type Rectangle}">
    129  - <Setter Property="Fill" Value="{DynamicResource MahApps.Brushes.Gray3}" />
    130  - <Style.Triggers>
    131  - <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Button}}, Path=IsMouseOver}" Value="True">
    132  - <Setter Property="Fill" Value="Red" />
    133  - </DataTrigger>
    134  - </Style.Triggers>
    135  - </Style>
    136  - </Rectangle.Style>
    137  - </Rectangle>
    138  - </Button>
    139  - </StackPanel>
    140  - </Grid>
    141  - </Border>
    142  - </DataTemplate>
    143  - </dragablz:TabablzControl.HeaderItemTemplate>
    144  - </dragablz:TabablzControl>
    145  - </airspaceFixer:AirspacePanel>
     43 + <dragablz:TabablzControl Grid.Column="0" Grid.Row="0" ClosingItemCallback="{Binding CloseItemCommand}" ItemsSource="{Binding TabItems}" SelectedItem="{Binding SelectedTabItem}" Visibility="{Binding Source={x:Static settings:ConfigurationManager.Current}, Path=IsDialogOpen, Converter={StaticResource BooleanReverseToVisibilityCollapsedConverter}}">
     44 + <dragablz:TabablzControl.Resources>
     45 + <wpfHelpers:BindingProxy x:Key="BindingProxy" Data="{Binding}" />
     46 + </dragablz:TabablzControl.Resources>
     47 + <dragablz:TabablzControl.InterTabController>
     48 + <dragablz:InterTabController InterTabClient="{Binding InterTabClient}" MoveWindowWithSolitaryTabs="False" x:Name="InterTabController" />
     49 + </dragablz:TabablzControl.InterTabController>
     50 + <dragablz:TabablzControl.HeaderSuffixContent>
     51 + <Grid HorizontalAlignment="Right" Width="32" Height="32">
     52 + <Button Style="{StaticResource CleanButton}" Command="{Binding ConnectCommand}" ToolTip="{x:Static localization:Strings.NewConnectionDots}" Focusable="False">
     53 + <Rectangle Width="16" Height="16">
     54 + <Rectangle.OpacityMask>
     55 + <VisualBrush Stretch="Fill" Visual="{iconPacks:Material Kind=Plus}" />
     56 + </Rectangle.OpacityMask>
     57 + <Rectangle.Style>
     58 + <Style TargetType="{x:Type Rectangle}">
     59 + <Setter Property="Fill" Value="{DynamicResource MahApps.Brushes.Gray3}" />
     60 + <Style.Triggers>
     61 + <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Button}}, Path=IsMouseOver}" Value="True">
     62 + <Setter Property="Fill" Value="{DynamicResource MahApps.Brushes.Gray5}" />
     63 + </DataTrigger>
     64 + </Style.Triggers>
     65 + </Style>
     66 + </Rectangle.Style>
     67 + </Rectangle>
     68 + </Button>
     69 + </Grid>
     70 + </dragablz:TabablzControl.HeaderSuffixContent>
     71 + <dragablz:TabablzControl.HeaderItemTemplate>
     72 + <DataTemplate DataType="controls:DragablzTabItem">
     73 + <Border BorderBrush="{DynamicResource MahApps.Brushes.Gray8}" BorderThickness="0,0,1,0">
     74 + <Grid Height="32">
     75 + <Grid.ContextMenu>
     76 + <ContextMenu IsOpen="{Binding Data.HeaderContextMenuIsOpen, Source={StaticResource BindingProxy}, Mode=OneWayToSource}">
     77 + <MenuItem Header="{x:Static localization:Strings.Reconnect}" Command="{Binding Data.ReconnectCommand, Source={StaticResource BindingProxy}}" CommandParameter="{Binding View}">
     78 + <MenuItem.Icon>
     79 + <Rectangle Width="16" Height="16" Fill="{DynamicResource MahApps.Brushes.Gray3}">
     80 + <Rectangle.OpacityMask>
     81 + <VisualBrush Stretch="Uniform" Visual="{iconPacks:Material Kind=Restart}" />
     82 + </Rectangle.OpacityMask>
     83 + </Rectangle>
     84 + </MenuItem.Icon>
     85 + </MenuItem>
     86 + <Separator />
     87 + <MenuItem Header="{x:Static localization:Strings.Resize}" Command="{Binding Data.ResizeWindowCommand, Source={StaticResource BindingProxy}}" CommandParameter="{Binding View}">
     88 + <MenuItem.Icon>
     89 + <Rectangle Width="16" Height="16" Fill="{DynamicResource MahApps.Brushes.Gray3}">
     90 + <Rectangle.OpacityMask>
     91 + <VisualBrush Stretch="Uniform" Visual="{iconPacks:Modern Kind=ArrowExpand}" />
     92 + </Rectangle.OpacityMask>
     93 + </Rectangle>
     94 + </MenuItem.Icon>
     95 + </MenuItem>
     96 + </ContextMenu>
     97 + </Grid.ContextMenu>
     98 + <Grid.InputBindings>
     99 + <MouseBinding Command="dragablz:TabablzControl.CloseItemCommand" Gesture="MiddleClick" />
     100 + </Grid.InputBindings>
     101 + <StackPanel Orientation="Horizontal">
     102 + <Grid ToolTip="{Binding Header}">
     103 + <TextBlock Text="{Binding Header}" Width="150" Margin="10,0" VerticalAlignment="Center">
     104 + <TextBlock.Style>
     105 + <Style TargetType="{x:Type TextBlock}" BasedOn="{StaticResource HeaderTextBlock}">
     106 + <Setter Property="Foreground" Value="{DynamicResource MahApps.Brushes.Gray3}" />
     107 + <Style.Triggers>
     108 + <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type dragablz:DragablzItem}}, Path=IsMouseOver}" Value="True">
     109 + <Setter Property="Foreground" Value="{DynamicResource MahApps.Brushes.Gray5}" />
     110 + </DataTrigger>
     111 + <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type dragablz:DragablzItem}}, Path=IsSelected}" Value="True">
     112 + <Setter Property="Foreground" Value="{DynamicResource MahApps.Brushes.Accent}" />
     113 + </DataTrigger>
     114 + </Style.Triggers>
     115 + </Style>
     116 + </TextBlock.Style>
     117 + </TextBlock>
     118 + <Thumb Style="{DynamicResource InvisibleThumbStyle}" dragablz:DragablzItem.IsCustomThumb="True" />
     119 + </Grid>
     120 + <Button Style="{StaticResource CleanButton}" Command="dragablz:TabablzControl.CloseItemCommand" ToolTip="{x:Static localization:Strings.Close}" Margin="0,0,10,0">
     121 + <Rectangle Width="16" Height="16">
     122 + <Rectangle.OpacityMask>
     123 + <VisualBrush Stretch="Uniform" Visual="{iconPacks:Material Kind=WindowClose}" />
     124 + </Rectangle.OpacityMask>
     125 + <Rectangle.Style>
     126 + <Style TargetType="{x:Type Rectangle}">
     127 + <Setter Property="Fill" Value="{DynamicResource MahApps.Brushes.Gray3}" />
     128 + <Style.Triggers>
     129 + <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Button}}, Path=IsMouseOver}" Value="True">
     130 + <Setter Property="Fill" Value="Red" />
     131 + </DataTrigger>
     132 + </Style.Triggers>
     133 + </Style>
     134 + </Rectangle.Style>
     135 + </Rectangle>
     136 + </Button>
     137 + </StackPanel>
     138 + </Grid>
     139 + </Border>
     140 + </DataTemplate>
     141 + </dragablz:TabablzControl.HeaderItemTemplate>
     142 + </dragablz:TabablzControl>
    146 143   <Grid Grid.Column="0" VerticalAlignment="Center">
    147 144   <Grid.Style>
    148 145   <Style TargetType="{x:Type Grid}">
    skipped 386 lines
  • ■ ■ ■ ■ ■ ■
    Source/NETworkManager/Views/PuTTYHostView.xaml
    skipped 5 lines
    6 6   xmlns:dragablz="clr-namespace:Dragablz;assembly=Dragablz"
    7 7   xmlns:iconPacks="http://metro.mahapps.com/winfx/xaml/iconpacks"
    8 8   xmlns:converters="clr-namespace:NETworkManager.Converters;assembly=NETworkManager.Converters"
    9  - xmlns:airspaceFixer="clr-namespace:AirspaceFixer;assembly=AirspaceFixer"
    10 9   xmlns:dialogs="clr-namespace:MahApps.Metro.Controls.Dialogs;assembly=MahApps.Metro"
    11 10   xmlns:viewModels="clr-namespace:NETworkManager.ViewModels"
    12 11   xmlns:localization="clr-namespace:NETworkManager.Localization.Resources;assembly=NETworkManager.Localization"
    skipped 29 lines
    42 41   <ColumnDefinition Width="Auto" />
    43 42   <ColumnDefinition MinWidth="{x:Static settings:GlobalStaticConfiguration.Profile_WidthCollapsed}" Width="{Binding ProfileWidth, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" MaxWidth="{x:Static settings:GlobalStaticConfiguration.Profile_MaxWidthExpanded}" />
    44 43   </Grid.ColumnDefinitions>
    45  - <airspaceFixer:AirspacePanel Grid.Column="0" Grid.Row="0" FixAirspace="{Binding Source={x:Static settings:ConfigurationManager.Current}, Path=IsDialogOpen}">
    46  - <dragablz:TabablzControl ClosingItemCallback="{Binding CloseItemCommand}" ItemsSource="{Binding TabItems}" SelectedItem="{Binding SelectedTabItem}" Visibility="{Binding Source={x:Static settings:ConfigurationManager.Current}, Path=IsDialogOpen, Converter={StaticResource BooleanReverseToVisibilityCollapsedConverter}}">
    47  - <dragablz:TabablzControl.Resources>
    48  - <wpfHelpers:BindingProxy x:Key="BindingProxy" Data="{Binding}" />
    49  - </dragablz:TabablzControl.Resources>
    50  - <dragablz:TabablzControl.InterTabController>
    51  - <dragablz:InterTabController InterTabClient="{Binding InterTabClient}" MoveWindowWithSolitaryTabs="False" x:Name="InterTabController" />
    52  - </dragablz:TabablzControl.InterTabController>
    53  - <dragablz:TabablzControl.HeaderSuffixContent>
    54  - <Grid HorizontalAlignment="Right" Width="32" Height="32">
    55  - <Button Style="{StaticResource CleanButton}" Command="{Binding ConnectCommand}" ToolTip="{x:Static localization:Strings.NewConnectionDots}" Focusable="False">
    56  - <Rectangle Width="16" Height="16">
    57  - <Rectangle.OpacityMask>
    58  - <VisualBrush Stretch="Fill" Visual="{iconPacks:Material Kind=Plus}" />
    59  - </Rectangle.OpacityMask>
    60  - <Rectangle.Style>
    61  - <Style TargetType="{x:Type Rectangle}">
    62  - <Setter Property="Fill" Value="{DynamicResource MahApps.Brushes.Gray3}" />
    63  - <Style.Triggers>
    64  - <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Button}}, Path=IsMouseOver}" Value="True">
    65  - <Setter Property="Fill" Value="{DynamicResource MahApps.Brushes.Gray5}" />
    66  - </DataTrigger>
    67  - </Style.Triggers>
    68  - </Style>
    69  - </Rectangle.Style>
    70  - </Rectangle>
    71  - </Button>
    72  - </Grid>
    73  - </dragablz:TabablzControl.HeaderSuffixContent>
    74  - <dragablz:TabablzControl.HeaderItemTemplate>
    75  - <DataTemplate DataType="controls:DragablzTabItem">
    76  - <Border BorderBrush="{DynamicResource MahApps.Brushes.Gray8}" BorderThickness="0,0,1,0">
    77  - <Grid Height="32">
    78  - <Grid.ContextMenu>
    79  - <ContextMenu IsOpen="{Binding Data.HeaderContextMenuIsOpen, Source={StaticResource BindingProxy}, Mode=OneWayToSource}">
    80  - <MenuItem Header="{x:Static localization:Strings.Reconnect}" Command="{Binding Data.ReconnectCommand, Source={StaticResource BindingProxy}}" CommandParameter="{Binding View}">
    81  - <MenuItem.Icon>
    82  - <Rectangle Width="16" Height="16" Fill="{DynamicResource MahApps.Brushes.Gray3}">
    83  - <Rectangle.OpacityMask>
    84  - <VisualBrush Stretch="Uniform" Visual="{iconPacks:Material Kind=Restart}" />
    85  - </Rectangle.OpacityMask>
    86  - </Rectangle>
    87  - </MenuItem.Icon>
    88  - </MenuItem>
    89  - <Separator />
    90  - <MenuItem Header="{x:Static localization:Strings.Resize}" Command="{Binding Data.ResizeWindowCommand, Source={StaticResource BindingProxy}}" CommandParameter="{Binding View}">
    91  - <MenuItem.Icon>
    92  - <Rectangle Width="16" Height="16" Fill="{DynamicResource MahApps.Brushes.Gray3}">
    93  - <Rectangle.OpacityMask>
    94  - <VisualBrush Stretch="Uniform" Visual="{iconPacks:Modern Kind=ArrowExpand}" />
    95  - </Rectangle.OpacityMask>
    96  - </Rectangle>
    97  - </MenuItem.Icon>
    98  - </MenuItem>
    99  - <MenuItem Header="{x:Static localization:Strings.RestartSession}" Command="{Binding Data.RestartSessionCommand, Source={StaticResource BindingProxy}}" CommandParameter="{Binding View}">
    100  - <MenuItem.Icon>
    101  - <Rectangle Width="16" Height="16" Fill="{DynamicResource MahApps.Brushes.Gray3}">
    102  - <Rectangle.OpacityMask>
    103  - <VisualBrush Stretch="Uniform" Visual="{iconPacks:Modern Kind=Refresh}" />
    104  - </Rectangle.OpacityMask>
    105  - </Rectangle>
    106  - </MenuItem.Icon>
    107  - </MenuItem>
    108  - </ContextMenu>
    109  - </Grid.ContextMenu>
    110  - <Grid.InputBindings>
    111  - <MouseBinding Command="dragablz:TabablzControl.CloseItemCommand" Gesture="MiddleClick" />
    112  - </Grid.InputBindings>
    113  - <StackPanel Orientation="Horizontal">
    114  - <Grid ToolTip="{Binding Header}">
    115  - <TextBlock Text="{Binding Header}" Width="150" Margin="10,0" VerticalAlignment="Center">
    116  - <TextBlock.Style>
    117  - <Style TargetType="{x:Type TextBlock}" BasedOn="{StaticResource HeaderTextBlock}">
    118  - <Setter Property="Foreground" Value="{DynamicResource MahApps.Brushes.Gray3}" />
    119  - <Style.Triggers>
    120  - <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type dragablz:DragablzItem}}, Path=IsMouseOver}" Value="True">
    121  - <Setter Property="Foreground" Value="{DynamicResource MahApps.Brushes.Gray5}" />
    122  - </DataTrigger>
    123  - <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type dragablz:DragablzItem}}, Path=IsSelected}" Value="True">
    124  - <Setter Property="Foreground" Value="{DynamicResource MahApps.Brushes.Accent}" />
    125  - </DataTrigger>
    126  - </Style.Triggers>
    127  - </Style>
    128  - </TextBlock.Style>
    129  - </TextBlock>
    130  - <Thumb Style="{DynamicResource InvisibleThumbStyle}" dragablz:DragablzItem.IsCustomThumb="True" />
    131  - </Grid>
    132  - <Button Style="{StaticResource CleanButton}" Command="dragablz:TabablzControl.CloseItemCommand" ToolTip="{x:Static localization:Strings.Close}" Margin="0,0,10,0">
    133  - <Rectangle Width="16" Height="16">
    134  - <Rectangle.OpacityMask>
    135  - <VisualBrush Stretch="Uniform" Visual="{iconPacks:Material Kind=WindowClose}" />
    136  - </Rectangle.OpacityMask>
    137  - <Rectangle.Style>
    138  - <Style TargetType="{x:Type Rectangle}">
    139  - <Setter Property="Fill" Value="{DynamicResource MahApps.Brushes.Gray3}" />
    140  - <Style.Triggers>
    141  - <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Button}}, Path=IsMouseOver}" Value="True">
    142  - <Setter Property="Fill" Value="Red" />
    143  - </DataTrigger>
    144  - </Style.Triggers>
    145  - </Style>
    146  - </Rectangle.Style>
    147  - </Rectangle>
    148  - </Button>
    149  - </StackPanel>
    150  - </Grid>
    151  - </Border>
    152  - </DataTemplate>
    153  - </dragablz:TabablzControl.HeaderItemTemplate>
    154  - </dragablz:TabablzControl>
    155  - </airspaceFixer:AirspacePanel>
     44 + <dragablz:TabablzControl Grid.Column="0" Grid.Row="0" ClosingItemCallback="{Binding CloseItemCommand}" ItemsSource="{Binding TabItems}" SelectedItem="{Binding SelectedTabItem}" Visibility="{Binding Source={x:Static settings:ConfigurationManager.Current}, Path=IsDialogOpen, Converter={StaticResource BooleanReverseToVisibilityCollapsedConverter}}">
     45 + <dragablz:TabablzControl.Resources>
     46 + <wpfHelpers:BindingProxy x:Key="BindingProxy" Data="{Binding}" />
     47 + </dragablz:TabablzControl.Resources>
     48 + <dragablz:TabablzControl.InterTabController>
     49 + <dragablz:InterTabController InterTabClient="{Binding InterTabClient}" MoveWindowWithSolitaryTabs="False" x:Name="InterTabController" />
     50 + </dragablz:TabablzControl.InterTabController>
     51 + <dragablz:TabablzControl.HeaderSuffixContent>
     52 + <Grid HorizontalAlignment="Right" Width="32" Height="32">
     53 + <Button Style="{StaticResource CleanButton}" Command="{Binding ConnectCommand}" ToolTip="{x:Static localization:Strings.NewConnectionDots}" Focusable="False">
     54 + <Rectangle Width="16" Height="16">
     55 + <Rectangle.OpacityMask>
     56 + <VisualBrush Stretch="Fill" Visual="{iconPacks:Material Kind=Plus}" />
     57 + </Rectangle.OpacityMask>
     58 + <Rectangle.Style>
     59 + <Style TargetType="{x:Type Rectangle}">
     60 + <Setter Property="Fill" Value="{DynamicResource MahApps.Brushes.Gray3}" />
     61 + <Style.Triggers>
     62 + <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Button}}, Path=IsMouseOver}" Value="True">
     63 + <Setter Property="Fill" Value="{DynamicResource MahApps.Brushes.Gray5}" />
     64 + </DataTrigger>
     65 + </Style.Triggers>
     66 + </Style>
     67 + </Rectangle.Style>
     68 + </Rectangle>
     69 + </Button>
     70 + </Grid>
     71 + </dragablz:TabablzControl.HeaderSuffixContent>
     72 + <dragablz:TabablzControl.HeaderItemTemplate>
     73 + <DataTemplate DataType="controls:DragablzTabItem">
     74 + <Border BorderBrush="{DynamicResource MahApps.Brushes.Gray8}" BorderThickness="0,0,1,0">
     75 + <Grid Height="32">
     76 + <Grid.ContextMenu>
     77 + <ContextMenu IsOpen="{Binding Data.HeaderContextMenuIsOpen, Source={StaticResource BindingProxy}, Mode=OneWayToSource}">
     78 + <MenuItem Header="{x:Static localization:Strings.Reconnect}" Command="{Binding Data.ReconnectCommand, Source={StaticResource BindingProxy}}" CommandParameter="{Binding View}">
     79 + <MenuItem.Icon>
     80 + <Rectangle Width="16" Height="16" Fill="{DynamicResource MahApps.Brushes.Gray3}">
     81 + <Rectangle.OpacityMask>
     82 + <VisualBrush Stretch="Uniform" Visual="{iconPacks:Material Kind=Restart}" />
     83 + </Rectangle.OpacityMask>
     84 + </Rectangle>
     85 + </MenuItem.Icon>
     86 + </MenuItem>
     87 + <Separator />
     88 + <MenuItem Header="{x:Static localization:Strings.Resize}" Command="{Binding Data.ResizeWindowCommand, Source={StaticResource BindingProxy}}" CommandParameter="{Binding View}">
     89 + <MenuItem.Icon>
     90 + <Rectangle Width="16" Height="16" Fill="{DynamicResource MahApps.Brushes.Gray3}">
     91 + <Rectangle.OpacityMask>
     92 + <VisualBrush Stretch="Uniform" Visual="{iconPacks:Modern Kind=ArrowExpand}" />
     93 + </Rectangle.OpacityMask>
     94 + </Rectangle>
     95 + </MenuItem.Icon>
     96 + </MenuItem>
     97 + <MenuItem Header="{x:Static localization:Strings.RestartSession}" Command="{Binding Data.RestartSessionCommand, Source={StaticResource BindingProxy}}" CommandParameter="{Binding View}">
     98 + <MenuItem.Icon>
     99 + <Rectangle Width="16" Height="16" Fill="{DynamicResource MahApps.Brushes.Gray3}">
     100 + <Rectangle.OpacityMask>
     101 + <VisualBrush Stretch="Uniform" Visual="{iconPacks:Modern Kind=Refresh}" />
     102 + </Rectangle.OpacityMask>
     103 + </Rectangle>
     104 + </MenuItem.Icon>
     105 + </MenuItem>
     106 + </ContextMenu>
     107 + </Grid.ContextMenu>
     108 + <Grid.InputBindings>
     109 + <MouseBinding Command="dragablz:TabablzControl.CloseItemCommand" Gesture="MiddleClick" />
     110 + </Grid.InputBindings>
     111 + <StackPanel Orientation="Horizontal">
     112 + <Grid ToolTip="{Binding Header}">
     113 + <TextBlock Text="{Binding Header}" Width="150" Margin="10,0" VerticalAlignment="Center">
     114 + <TextBlock.Style>
     115 + <Style TargetType="{x:Type TextBlock}" BasedOn="{StaticResource HeaderTextBlock}">
     116 + <Setter Property="Foreground" Value="{DynamicResource MahApps.Brushes.Gray3}" />
     117 + <Style.Triggers>
     118 + <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type dragablz:DragablzItem}}, Path=IsMouseOver}" Value="True">
     119 + <Setter Property="Foreground" Value="{DynamicResource MahApps.Brushes.Gray5}" />
     120 + </DataTrigger>
     121 + <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type dragablz:DragablzItem}}, Path=IsSelected}" Value="True">
     122 + <Setter Property="Foreground" Value="{DynamicResource MahApps.Brushes.Accent}" />
     123 + </DataTrigger>
     124 + </Style.Triggers>
     125 + </Style>
     126 + </TextBlock.Style>
     127 + </TextBlock>
     128 + <Thumb Style="{DynamicResource InvisibleThumbStyle}" dragablz:DragablzItem.IsCustomThumb="True" />
     129 + </Grid>
     130 + <Button Style="{StaticResource CleanButton}" Command="dragablz:TabablzControl.CloseItemCommand" ToolTip="{x:Static localization:Strings.Close}" Margin="0,0,10,0">
     131 + <Rectangle Width="16" Height="16">
     132 + <Rectangle.OpacityMask>
     133 + <VisualBrush Stretch="Uniform" Visual="{iconPacks:Material Kind=WindowClose}" />
     134 + </Rectangle.OpacityMask>
     135 + <Rectangle.Style>
     136 + <Style TargetType="{x:Type Rectangle}">
     137 + <Setter Property="Fill" Value="{DynamicResource MahApps.Brushes.Gray3}" />
     138 + <Style.Triggers>
     139 + <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Button}}, Path=IsMouseOver}" Value="True">
     140 + <Setter Property="Fill" Value="Red" />
     141 + </DataTrigger>
     142 + </Style.Triggers>
     143 + </Style>
     144 + </Rectangle.Style>
     145 + </Rectangle>
     146 + </Button>
     147 + </StackPanel>
     148 + </Grid>
     149 + </Border>
     150 + </DataTemplate>
     151 + </dragablz:TabablzControl.HeaderItemTemplate>
     152 + </dragablz:TabablzControl>
    156 153   <Grid Grid.Column="0" VerticalAlignment="Center">
    157 154   <Grid.Style>
    158 155   <Style TargetType="{x:Type Grid}">
    skipped 386 lines
  • ■ ■ ■ ■ ■ ■
    Source/NETworkManager/Views/RemoteDesktopHostView.xaml
    skipped 6 lines
    7 7   xmlns:iconPacks="http://metro.mahapps.com/winfx/xaml/iconpacks"
    8 8   xmlns:converters="clr-namespace:NETworkManager.Converters;assembly=NETworkManager.Converters"
    9 9   xmlns:dialogs="clr-namespace:MahApps.Metro.Controls.Dialogs;assembly=MahApps.Metro"
    10  - xmlns:asf="clr-namespace:AirspaceFixer;assembly=AirspaceFixer"
    11 10   xmlns:viewModels="clr-namespace:NETworkManager.ViewModels"
    12 11   xmlns:localization="clr-namespace:NETworkManager.Localization.Resources;assembly=NETworkManager.Localization"
    13 12   xmlns:settings="clr-namespace:NETworkManager.Settings;assembly=NETworkManager.Settings"
    skipped 16 lines
    30 29   <ColumnDefinition Width="Auto" />
    31 30   <ColumnDefinition MinWidth="{x:Static settings:GlobalStaticConfiguration.Profile_WidthCollapsed}" Width="{Binding ProfileWidth, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" MaxWidth="{x:Static settings:GlobalStaticConfiguration.Profile_MaxWidthExpanded}" />
    32 31   </Grid.ColumnDefinitions>
    33  - <asf:AirspacePanel Grid.Column="0" Grid.Row="0" FixAirspace="{Binding Source={x:Static settings:ConfigurationManager.Current}, Path=IsDialogOpen}">
    34  - <dragablz:TabablzControl ClosingItemCallback="{Binding CloseItemCommand}" ItemsSource="{Binding TabItems}" SelectedIndex="{Binding SelectedTabIndex}">
    35  - <dragablz:TabablzControl.Resources>
    36  - <wpfHelpers:BindingProxy x:Key="BindingProxy" Data="{Binding}" />
    37  - </dragablz:TabablzControl.Resources>
    38  - <dragablz:TabablzControl.InterTabController>
    39  - <dragablz:InterTabController InterTabClient="{Binding InterTabClient}" MoveWindowWithSolitaryTabs="False" x:Name="InterTabController" />
    40  - </dragablz:TabablzControl.InterTabController>
    41  - <dragablz:TabablzControl.HeaderSuffixContent>
    42  - <Grid HorizontalAlignment="Right" Width="32" Height="32">
    43  - <Button Style="{StaticResource CleanButton}" Command="{Binding ConnectCommand}" ToolTip="{x:Static localization:Strings.NewConnectionDots}" Focusable="False">
    44  - <Rectangle Width="16" Height="16">
    45  - <Rectangle.OpacityMask>
    46  - <VisualBrush Stretch="Fill" Visual="{iconPacks:Material Kind=Plus}" />
    47  - </Rectangle.OpacityMask>
    48  - <Rectangle.Style>
    49  - <Style TargetType="{x:Type Rectangle}">
    50  - <Setter Property="Fill" Value="{DynamicResource MahApps.Brushes.Gray3}" />
    51  - <Style.Triggers>
    52  - <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Button}}, Path=IsMouseOver}" Value="True">
    53  - <Setter Property="Fill" Value="{DynamicResource MahApps.Brushes.Gray5}" />
    54  - </DataTrigger>
    55  - </Style.Triggers>
    56  - </Style>
    57  - </Rectangle.Style>
    58  - </Rectangle>
    59  - </Button>
    60  - </Grid>
    61  - </dragablz:TabablzControl.HeaderSuffixContent>
    62  - <dragablz:TabablzControl.HeaderItemTemplate>
    63  - <DataTemplate DataType="controls:DragablzTabItem">
    64  - <Border BorderBrush="{DynamicResource MahApps.Brushes.Gray8}" BorderThickness="0,0,1,0">
    65  - <Grid Height="32">
    66  - <Grid.ContextMenu>
    67  - <ContextMenu>
    68  - <MenuItem Header="{x:Static localization:Strings.Reconnect}" Command="{Binding Data.ReconnectCommand, Source={StaticResource BindingProxy}}" CommandParameter="{Binding View}">
    69  - <MenuItem.Icon>
    70  - <Rectangle Width="16" Height="16" Fill="{DynamicResource MahApps.Brushes.Gray3}">
    71  - <Rectangle.OpacityMask>
    72  - <VisualBrush Stretch="Uniform" Visual="{iconPacks:Material Kind=Restart}" />
    73  - </Rectangle.OpacityMask>
    74  - </Rectangle>
    75  - </MenuItem.Icon>
    76  - </MenuItem>
    77  - <MenuItem Header="{x:Static localization:Strings.Disconnect}" Command="{Binding Data.DisconnectCommand, Source={StaticResource BindingProxy}}" CommandParameter="{Binding View}">
    78  - <MenuItem.Icon>
    79  - <Rectangle Width="16" Height="16" Fill="{DynamicResource MahApps.Brushes.Gray3}">
    80  - <Rectangle.OpacityMask>
    81  - <VisualBrush Stretch="Uniform" Visual="{iconPacks:Modern Kind=Disconnect}" />
    82  - </Rectangle.OpacityMask>
    83  - </Rectangle>
    84  - </MenuItem.Icon>
    85  - </MenuItem>
    86  - <Separator />
    87  - <MenuItem Header="{x:Static localization:Strings.Fullscreen}" Command="{Binding Data.FullscreenCommand, Source={StaticResource BindingProxy}}" CommandParameter="{Binding View}">
    88  - <MenuItem.Icon>
    89  - <Rectangle Width="16" Height="16" Fill="{DynamicResource MahApps.Brushes.Gray3}">
    90  - <Rectangle.OpacityMask>
    91  - <VisualBrush Stretch="Uniform" Visual="{iconPacks:Octicons Kind=ScreenFull}" />
    92  - </Rectangle.OpacityMask>
    93  - </Rectangle>
    94  - </MenuItem.Icon>
    95  - </MenuItem>
    96  - <MenuItem Header="{x:Static localization:Strings.AdjustScreen}" Command="{Binding Data.AdjustScreenCommand, Source={StaticResource BindingProxy}}" CommandParameter="{Binding View}">
    97  - <MenuItem.Icon>
    98  - <Rectangle Width="16" Height="16" Fill="{DynamicResource MahApps.Brushes.Gray3}">
    99  - <Rectangle.OpacityMask>
    100  - <VisualBrush Stretch="Uniform" Visual="{iconPacks:Octicons Kind=ScreenNormal}" />
    101  - </Rectangle.OpacityMask>
    102  - </Rectangle>
    103  - </MenuItem.Icon>
    104  - </MenuItem>
    105  - <Separator />
    106  - <MenuItem Header="{x:Static localization:Strings.KeyboardShortcuts}">
    107  - <MenuItem.Icon>
    108  - <Rectangle Width="16" Height="16" Fill="{DynamicResource MahApps.Brushes.Gray3}">
    109  - <Rectangle.OpacityMask>
    110  - <VisualBrush Stretch="Uniform" Visual="{iconPacks:Material Kind=KeyboardVariant}" />
    111  - </Rectangle.OpacityMask>
    112  - </Rectangle>
    113  - </MenuItem.Icon>
    114  - <MenuItem Header="{x:Static localization:Strings.CtrlAltDel}" Command="{Binding Data.SendCtrlAltDelCommand, Source={StaticResource BindingProxy}}" CommandParameter="{Binding View}" />
    115  - </MenuItem>
    116  - </ContextMenu>
    117  - </Grid.ContextMenu>
    118  - <Grid.InputBindings>
    119  - <MouseBinding Command="dragablz:TabablzControl.CloseItemCommand" Gesture="MiddleClick" />
    120  - </Grid.InputBindings>
    121  - <StackPanel Orientation="Horizontal">
    122  - <Grid ToolTip="{Binding Header}">
    123  - <TextBlock Text="{Binding Header}" Width="150" Margin="10,0" VerticalAlignment="Center">
    124  - <TextBlock.Style>
    125  - <Style TargetType="{x:Type TextBlock}" BasedOn="{StaticResource HeaderTextBlock}">
    126  - <Setter Property="Foreground" Value="{DynamicResource MahApps.Brushes.Gray3}" />
    127  - <Style.Triggers>
    128  - <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type dragablz:DragablzItem}}, Path=IsMouseOver}" Value="True">
    129  - <Setter Property="Foreground" Value="{DynamicResource MahApps.Brushes.Gray5}" />
    130  - </DataTrigger>
    131  - <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type dragablz:DragablzItem}}, Path=IsSelected}" Value="True">
    132  - <Setter Property="Foreground" Value="{DynamicResource MahApps.Brushes.Accent}" />
    133  - </DataTrigger>
    134  - </Style.Triggers>
    135  - </Style>
    136  - </TextBlock.Style>
    137  - </TextBlock>
    138  - <Thumb Style="{DynamicResource InvisibleThumbStyle}" dragablz:DragablzItem.IsCustomThumb="True" />
    139  - </Grid>
    140  - <Button Style="{StaticResource CleanButton}" Command="dragablz:TabablzControl.CloseItemCommand" ToolTip="{x:Static localization:Strings.Close}" Margin="0,0,10,0">
    141  - <Rectangle Width="16" Height="16">
    142  - <Rectangle.OpacityMask>
    143  - <VisualBrush Stretch="Uniform" Visual="{iconPacks:Material Kind=WindowClose}" />
    144  - </Rectangle.OpacityMask>
    145  - <Rectangle.Style>
    146  - <Style TargetType="{x:Type Rectangle}">
    147  - <Setter Property="Fill" Value="{DynamicResource MahApps.Brushes.Gray3}" />
    148  - <Style.Triggers>
    149  - <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Button}}, Path=IsMouseOver}" Value="True">
    150  - <Setter Property="Fill" Value="Red" />
    151  - </DataTrigger>
    152  - </Style.Triggers>
    153  - </Style>
    154  - </Rectangle.Style>
    155  - </Rectangle>
    156  - </Button>
    157  - </StackPanel>
    158  - </Grid>
    159  - </Border>
    160  - </DataTemplate>
    161  - </dragablz:TabablzControl.HeaderItemTemplate>
    162  - </dragablz:TabablzControl>
    163  - </asf:AirspacePanel>
     32 + <dragablz:TabablzControl Grid.Column="0" Grid.Row="0" ClosingItemCallback="{Binding CloseItemCommand}" ItemsSource="{Binding TabItems}" SelectedIndex="{Binding SelectedTabIndex}">
     33 + <dragablz:TabablzControl.Resources>
     34 + <wpfHelpers:BindingProxy x:Key="BindingProxy" Data="{Binding}" />
     35 + </dragablz:TabablzControl.Resources>
     36 + <dragablz:TabablzControl.InterTabController>
     37 + <dragablz:InterTabController InterTabClient="{Binding InterTabClient}" MoveWindowWithSolitaryTabs="False" x:Name="InterTabController" />
     38 + </dragablz:TabablzControl.InterTabController>
     39 + <dragablz:TabablzControl.HeaderSuffixContent>
     40 + <Grid HorizontalAlignment="Right" Width="32" Height="32">
     41 + <Button Style="{StaticResource CleanButton}" Command="{Binding ConnectCommand}" ToolTip="{x:Static localization:Strings.NewConnectionDots}" Focusable="False">
     42 + <Rectangle Width="16" Height="16">
     43 + <Rectangle.OpacityMask>
     44 + <VisualBrush Stretch="Fill" Visual="{iconPacks:Material Kind=Plus}" />
     45 + </Rectangle.OpacityMask>
     46 + <Rectangle.Style>
     47 + <Style TargetType="{x:Type Rectangle}">
     48 + <Setter Property="Fill" Value="{DynamicResource MahApps.Brushes.Gray3}" />
     49 + <Style.Triggers>
     50 + <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Button}}, Path=IsMouseOver}" Value="True">
     51 + <Setter Property="Fill" Value="{DynamicResource MahApps.Brushes.Gray5}" />
     52 + </DataTrigger>
     53 + </Style.Triggers>
     54 + </Style>
     55 + </Rectangle.Style>
     56 + </Rectangle>
     57 + </Button>
     58 + </Grid>
     59 + </dragablz:TabablzControl.HeaderSuffixContent>
     60 + <dragablz:TabablzControl.HeaderItemTemplate>
     61 + <DataTemplate DataType="controls:DragablzTabItem">
     62 + <Border BorderBrush="{DynamicResource MahApps.Brushes.Gray8}" BorderThickness="0,0,1,0">
     63 + <Grid Height="32">
     64 + <Grid.ContextMenu>
     65 + <ContextMenu>
     66 + <MenuItem Header="{x:Static localization:Strings.Reconnect}" Command="{Binding Data.ReconnectCommand, Source={StaticResource BindingProxy}}" CommandParameter="{Binding View}">
     67 + <MenuItem.Icon>
     68 + <Rectangle Width="16" Height="16" Fill="{DynamicResource MahApps.Brushes.Gray3}">
     69 + <Rectangle.OpacityMask>
     70 + <VisualBrush Stretch="Uniform" Visual="{iconPacks:Material Kind=Restart}" />
     71 + </Rectangle.OpacityMask>
     72 + </Rectangle>
     73 + </MenuItem.Icon>
     74 + </MenuItem>
     75 + <MenuItem Header="{x:Static localization:Strings.Disconnect}" Command="{Binding Data.DisconnectCommand, Source={StaticResource BindingProxy}}" CommandParameter="{Binding View}">
     76 + <MenuItem.Icon>
     77 + <Rectangle Width="16" Height="16" Fill="{DynamicResource MahApps.Brushes.Gray3}">
     78 + <Rectangle.OpacityMask>
     79 + <VisualBrush Stretch="Uniform" Visual="{iconPacks:Modern Kind=Disconnect}" />
     80 + </Rectangle.OpacityMask>
     81 + </Rectangle>
     82 + </MenuItem.Icon>
     83 + </MenuItem>
     84 + <Separator />
     85 + <MenuItem Header="{x:Static localization:Strings.Fullscreen}" Command="{Binding Data.FullscreenCommand, Source={StaticResource BindingProxy}}" CommandParameter="{Binding View}">
     86 + <MenuItem.Icon>
     87 + <Rectangle Width="16" Height="16" Fill="{DynamicResource MahApps.Brushes.Gray3}">
     88 + <Rectangle.OpacityMask>
     89 + <VisualBrush Stretch="Uniform" Visual="{iconPacks:Octicons Kind=ScreenFull}" />
     90 + </Rectangle.OpacityMask>
     91 + </Rectangle>
     92 + </MenuItem.Icon>
     93 + </MenuItem>
     94 + <MenuItem Header="{x:Static localization:Strings.AdjustScreen}" Command="{Binding Data.AdjustScreenCommand, Source={StaticResource BindingProxy}}" CommandParameter="{Binding View}">
     95 + <MenuItem.Icon>
     96 + <Rectangle Width="16" Height="16" Fill="{DynamicResource MahApps.Brushes.Gray3}">
     97 + <Rectangle.OpacityMask>
     98 + <VisualBrush Stretch="Uniform" Visual="{iconPacks:Octicons Kind=ScreenNormal}" />
     99 + </Rectangle.OpacityMask>
     100 + </Rectangle>
     101 + </MenuItem.Icon>
     102 + </MenuItem>
     103 + <Separator />
     104 + <MenuItem Header="{x:Static localization:Strings.KeyboardShortcuts}">
     105 + <MenuItem.Icon>
     106 + <Rectangle Width="16" Height="16" Fill="{DynamicResource MahApps.Brushes.Gray3}">
     107 + <Rectangle.OpacityMask>
     108 + <VisualBrush Stretch="Uniform" Visual="{iconPacks:Material Kind=KeyboardVariant}" />
     109 + </Rectangle.OpacityMask>
     110 + </Rectangle>
     111 + </MenuItem.Icon>
     112 + <MenuItem Header="{x:Static localization:Strings.CtrlAltDel}" Command="{Binding Data.SendCtrlAltDelCommand, Source={StaticResource BindingProxy}}" CommandParameter="{Binding View}" />
     113 + </MenuItem>
     114 + </ContextMenu>
     115 + </Grid.ContextMenu>
     116 + <Grid.InputBindings>
     117 + <MouseBinding Command="dragablz:TabablzControl.CloseItemCommand" Gesture="MiddleClick" />
     118 + </Grid.InputBindings>
     119 + <StackPanel Orientation="Horizontal">
     120 + <Grid ToolTip="{Binding Header}">
     121 + <TextBlock Text="{Binding Header}" Width="150" Margin="10,0" VerticalAlignment="Center">
     122 + <TextBlock.Style>
     123 + <Style TargetType="{x:Type TextBlock}" BasedOn="{StaticResource HeaderTextBlock}">
     124 + <Setter Property="Foreground" Value="{DynamicResource MahApps.Brushes.Gray3}" />
     125 + <Style.Triggers>
     126 + <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type dragablz:DragablzItem}}, Path=IsMouseOver}" Value="True">
     127 + <Setter Property="Foreground" Value="{DynamicResource MahApps.Brushes.Gray5}" />
     128 + </DataTrigger>
     129 + <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type dragablz:DragablzItem}}, Path=IsSelected}" Value="True">
     130 + <Setter Property="Foreground" Value="{DynamicResource MahApps.Brushes.Accent}" />
     131 + </DataTrigger>
     132 + </Style.Triggers>
     133 + </Style>
     134 + </TextBlock.Style>
     135 + </TextBlock>
     136 + <Thumb Style="{DynamicResource InvisibleThumbStyle}" dragablz:DragablzItem.IsCustomThumb="True" />
     137 + </Grid>
     138 + <Button Style="{StaticResource CleanButton}" Command="dragablz:TabablzControl.CloseItemCommand" ToolTip="{x:Static localization:Strings.Close}" Margin="0,0,10,0">
     139 + <Rectangle Width="16" Height="16">
     140 + <Rectangle.OpacityMask>
     141 + <VisualBrush Stretch="Uniform" Visual="{iconPacks:Material Kind=WindowClose}" />
     142 + </Rectangle.OpacityMask>
     143 + <Rectangle.Style>
     144 + <Style TargetType="{x:Type Rectangle}">
     145 + <Setter Property="Fill" Value="{DynamicResource MahApps.Brushes.Gray3}" />
     146 + <Style.Triggers>
     147 + <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Button}}, Path=IsMouseOver}" Value="True">
     148 + <Setter Property="Fill" Value="Red" />
     149 + </DataTrigger>
     150 + </Style.Triggers>
     151 + </Style>
     152 + </Rectangle.Style>
     153 + </Rectangle>
     154 + </Button>
     155 + </StackPanel>
     156 + </Grid>
     157 + </Border>
     158 + </DataTemplate>
     159 + </dragablz:TabablzControl.HeaderItemTemplate>
     160 + </dragablz:TabablzControl>
    164 161   <Grid Grid.Column="0" Grid.Row="0" VerticalAlignment="Center">
    165 162   <Grid.Style>
    166 163   <Style TargetType="{x:Type Grid}">
    skipped 357 lines
  • ■ ■ ■ ■ ■ ■
    Source/NETworkManager/Views/TigerVNCHostView.xaml
    skipped 5 lines
    6 6   xmlns:dragablz="clr-namespace:Dragablz;assembly=Dragablz"
    7 7   xmlns:iconPacks="http://metro.mahapps.com/winfx/xaml/iconpacks"
    8 8   xmlns:converters="clr-namespace:NETworkManager.Converters;assembly=NETworkManager.Converters"
    9  - xmlns:airspaceFixer="clr-namespace:AirspaceFixer;assembly=AirspaceFixer"
    10 9   xmlns:dialogs="clr-namespace:MahApps.Metro.Controls.Dialogs;assembly=MahApps.Metro"
    11 10   xmlns:viewModels="clr-namespace:NETworkManager.ViewModels"
    12 11   xmlns:localization="clr-namespace:NETworkManager.Localization.Resources;assembly=NETworkManager.Localization"
    skipped 27 lines
    40 39   <ColumnDefinition Width="Auto" />
    41 40   <ColumnDefinition MinWidth="{x:Static settings:GlobalStaticConfiguration.Profile_WidthCollapsed}" Width="{Binding ProfileWidth, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" MaxWidth="{x:Static settings:GlobalStaticConfiguration.Profile_MaxWidthExpanded}" />
    42 41   </Grid.ColumnDefinitions>
    43  - <airspaceFixer:AirspacePanel Grid.Column="0" Grid.Row="0" FixAirspace="{Binding Source={x:Static settings:ConfigurationManager.Current}, Path=IsDialogOpen}">
    44  - <dragablz:TabablzControl ClosingItemCallback="{Binding CloseItemCommand}" ItemsSource="{Binding TabItems}" SelectedIndex="{Binding SelectedTabIndex}" Visibility="{Binding Source={x:Static settings:ConfigurationManager.Current}, Path=IsDialogOpen, Converter={StaticResource BooleanReverseToVisibilityCollapsedConverter}}">
    45  - <dragablz:TabablzControl.Resources>
    46  - <wpfHelpers:BindingProxy x:Key="BindingProxy" Data="{Binding}" />
    47  - </dragablz:TabablzControl.Resources>
    48  - <dragablz:TabablzControl.InterTabController>
    49  - <dragablz:InterTabController InterTabClient="{Binding InterTabClient}" MoveWindowWithSolitaryTabs="False" x:Name="InterTabController" />
    50  - </dragablz:TabablzControl.InterTabController>
    51  - <dragablz:TabablzControl.HeaderSuffixContent>
    52  - <Grid HorizontalAlignment="Right" Width="32" Height="32">
    53  - <Button Style="{StaticResource CleanButton}" Command="{Binding ConnectCommand}" ToolTip="{x:Static localization:Strings.NewConnectionDots}" Focusable="False">
    54  - <Rectangle Width="16" Height="16">
    55  - <Rectangle.OpacityMask>
    56  - <VisualBrush Stretch="Fill" Visual="{iconPacks:Material Kind=Plus}" />
    57  - </Rectangle.OpacityMask>
    58  - <Rectangle.Style>
    59  - <Style TargetType="{x:Type Rectangle}">
    60  - <Setter Property="Fill" Value="{DynamicResource MahApps.Brushes.Gray3}" />
    61  - <Style.Triggers>
    62  - <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Button}}, Path=IsMouseOver}" Value="True">
    63  - <Setter Property="Fill" Value="{DynamicResource MahApps.Brushes.Gray5}" />
    64  - </DataTrigger>
    65  - </Style.Triggers>
    66  - </Style>
    67  - </Rectangle.Style>
    68  - </Rectangle>
    69  - </Button>
    70  - </Grid>
    71  - </dragablz:TabablzControl.HeaderSuffixContent>
    72  - <dragablz:TabablzControl.HeaderItemTemplate>
    73  - <DataTemplate DataType="controls:DragablzTabItem">
    74  - <Border BorderBrush="{DynamicResource MahApps.Brushes.Gray8}" BorderThickness="0,0,1,0">
    75  - <Grid Height="32">
    76  - <Grid.ContextMenu>
    77  - <ContextMenu>
    78  - <MenuItem Header="{x:Static localization:Strings.Reconnect}" Command="{Binding Data.ReconnectCommand, Source={StaticResource BindingProxy}}" CommandParameter="{Binding View}">
    79  - <MenuItem.Icon>
    80  - <Rectangle Width="16" Height="16" Fill="{DynamicResource MahApps.Brushes.Gray3}">
    81  - <Rectangle.OpacityMask>
    82  - <VisualBrush Stretch="Uniform" Visual="{iconPacks:Material Kind=Restart}" />
    83  - </Rectangle.OpacityMask>
    84  - </Rectangle>
    85  - </MenuItem.Icon>
    86  - </MenuItem>
    87  - </ContextMenu>
    88  - </Grid.ContextMenu>
    89  - <Grid.InputBindings>
    90  - <MouseBinding Command="dragablz:TabablzControl.CloseItemCommand" Gesture="MiddleClick" />
    91  - </Grid.InputBindings>
    92  - <StackPanel Orientation="Horizontal">
    93  - <Grid ToolTip="{Binding Header}">
    94  - <TextBlock Text="{Binding Header}" Width="150" Margin="10,0" VerticalAlignment="Center">
    95  - <TextBlock.Style>
    96  - <Style TargetType="{x:Type TextBlock}" BasedOn="{StaticResource HeaderTextBlock}">
    97  - <Setter Property="Foreground" Value="{DynamicResource MahApps.Brushes.Gray3}" />
    98  - <Style.Triggers>
    99  - <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type dragablz:DragablzItem}}, Path=IsMouseOver}" Value="True">
    100  - <Setter Property="Foreground" Value="{DynamicResource MahApps.Brushes.Gray5}" />
    101  - </DataTrigger>
    102  - <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type dragablz:DragablzItem}}, Path=IsSelected}" Value="True">
    103  - <Setter Property="Foreground" Value="{DynamicResource MahApps.Brushes.Accent}" />
    104  - </DataTrigger>
    105  - </Style.Triggers>
    106  - </Style>
    107  - </TextBlock.Style>
    108  - </TextBlock>
    109  - <Thumb Style="{DynamicResource InvisibleThumbStyle}" dragablz:DragablzItem.IsCustomThumb="True" />
    110  - </Grid>
    111  - <Button Style="{StaticResource CleanButton}" Command="dragablz:TabablzControl.CloseItemCommand" ToolTip="{x:Static localization:Strings.Close}" Margin="0,0,10,0">
    112  - <Rectangle Width="16" Height="16">
    113  - <Rectangle.OpacityMask>
    114  - <VisualBrush Stretch="Uniform" Visual="{iconPacks:Material Kind=WindowClose}" />
    115  - </Rectangle.OpacityMask>
    116  - <Rectangle.Style>
    117  - <Style TargetType="{x:Type Rectangle}">
    118  - <Setter Property="Fill" Value="{DynamicResource MahApps.Brushes.Gray3}" />
    119  - <Style.Triggers>
    120  - <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Button}}, Path=IsMouseOver}" Value="True">
    121  - <Setter Property="Fill" Value="Red" />
    122  - </DataTrigger>
    123  - </Style.Triggers>
    124  - </Style>
    125  - </Rectangle.Style>
    126  - </Rectangle>
    127  - </Button>
    128  - </StackPanel>
    129  - </Grid>
    130  - </Border>
    131  - </DataTemplate>
    132  - </dragablz:TabablzControl.HeaderItemTemplate>
    133  - </dragablz:TabablzControl>
    134  - </airspaceFixer:AirspacePanel>
     42 + <dragablz:TabablzControl Grid.Column="0" Grid.Row="0" ClosingItemCallback="{Binding CloseItemCommand}" ItemsSource="{Binding TabItems}" SelectedIndex="{Binding SelectedTabIndex}" Visibility="{Binding Source={x:Static settings:ConfigurationManager.Current}, Path=IsDialogOpen, Converter={StaticResource BooleanReverseToVisibilityCollapsedConverter}}">
     43 + <dragablz:TabablzControl.Resources>
     44 + <wpfHelpers:BindingProxy x:Key="BindingProxy" Data="{Binding}" />
     45 + </dragablz:TabablzControl.Resources>
     46 + <dragablz:TabablzControl.InterTabController>
     47 + <dragablz:InterTabController InterTabClient="{Binding InterTabClient}" MoveWindowWithSolitaryTabs="False" x:Name="InterTabController" />
     48 + </dragablz:TabablzControl.InterTabController>
     49 + <dragablz:TabablzControl.HeaderSuffixContent>
     50 + <Grid HorizontalAlignment="Right" Width="32" Height="32">
     51 + <Button Style="{StaticResource CleanButton}" Command="{Binding ConnectCommand}" ToolTip="{x:Static localization:Strings.NewConnectionDots}" Focusable="False">
     52 + <Rectangle Width="16" Height="16">
     53 + <Rectangle.OpacityMask>
     54 + <VisualBrush Stretch="Fill" Visual="{iconPacks:Material Kind=Plus}" />
     55 + </Rectangle.OpacityMask>
     56 + <Rectangle.Style>
     57 + <Style TargetType="{x:Type Rectangle}">
     58 + <Setter Property="Fill" Value="{DynamicResource MahApps.Brushes.Gray3}" />
     59 + <Style.Triggers>
     60 + <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Button}}, Path=IsMouseOver}" Value="True">
     61 + <Setter Property="Fill" Value="{DynamicResource MahApps.Brushes.Gray5}" />
     62 + </DataTrigger>
     63 + </Style.Triggers>
     64 + </Style>
     65 + </Rectangle.Style>
     66 + </Rectangle>
     67 + </Button>
     68 + </Grid>
     69 + </dragablz:TabablzControl.HeaderSuffixContent>
     70 + <dragablz:TabablzControl.HeaderItemTemplate>
     71 + <DataTemplate DataType="controls:DragablzTabItem">
     72 + <Border BorderBrush="{DynamicResource MahApps.Brushes.Gray8}" BorderThickness="0,0,1,0">
     73 + <Grid Height="32">
     74 + <Grid.ContextMenu>
     75 + <ContextMenu>
     76 + <MenuItem Header="{x:Static localization:Strings.Reconnect}" Command="{Binding Data.ReconnectCommand, Source={StaticResource BindingProxy}}" CommandParameter="{Binding View}">
     77 + <MenuItem.Icon>
     78 + <Rectangle Width="16" Height="16" Fill="{DynamicResource MahApps.Brushes.Gray3}">
     79 + <Rectangle.OpacityMask>
     80 + <VisualBrush Stretch="Uniform" Visual="{iconPacks:Material Kind=Restart}" />
     81 + </Rectangle.OpacityMask>
     82 + </Rectangle>
     83 + </MenuItem.Icon>
     84 + </MenuItem>
     85 + </ContextMenu>
     86 + </Grid.ContextMenu>
     87 + <Grid.InputBindings>
     88 + <MouseBinding Command="dragablz:TabablzControl.CloseItemCommand" Gesture="MiddleClick" />
     89 + </Grid.InputBindings>
     90 + <StackPanel Orientation="Horizontal">
     91 + <Grid ToolTip="{Binding Header}">
     92 + <TextBlock Text="{Binding Header}" Width="150" Margin="10,0" VerticalAlignment="Center">
     93 + <TextBlock.Style>
     94 + <Style TargetType="{x:Type TextBlock}" BasedOn="{StaticResource HeaderTextBlock}">
     95 + <Setter Property="Foreground" Value="{DynamicResource MahApps.Brushes.Gray3}" />
     96 + <Style.Triggers>
     97 + <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type dragablz:DragablzItem}}, Path=IsMouseOver}" Value="True">
     98 + <Setter Property="Foreground" Value="{DynamicResource MahApps.Brushes.Gray5}" />
     99 + </DataTrigger>
     100 + <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type dragablz:DragablzItem}}, Path=IsSelected}" Value="True">
     101 + <Setter Property="Foreground" Value="{DynamicResource MahApps.Brushes.Accent}" />
     102 + </DataTrigger>
     103 + </Style.Triggers>
     104 + </Style>
     105 + </TextBlock.Style>
     106 + </TextBlock>
     107 + <Thumb Style="{DynamicResource InvisibleThumbStyle}" dragablz:DragablzItem.IsCustomThumb="True" />
     108 + </Grid>
     109 + <Button Style="{StaticResource CleanButton}" Command="dragablz:TabablzControl.CloseItemCommand" ToolTip="{x:Static localization:Strings.Close}" Margin="0,0,10,0">
     110 + <Rectangle Width="16" Height="16">
     111 + <Rectangle.OpacityMask>
     112 + <VisualBrush Stretch="Uniform" Visual="{iconPacks:Material Kind=WindowClose}" />
     113 + </Rectangle.OpacityMask>
     114 + <Rectangle.Style>
     115 + <Style TargetType="{x:Type Rectangle}">
     116 + <Setter Property="Fill" Value="{DynamicResource MahApps.Brushes.Gray3}" />
     117 + <Style.Triggers>
     118 + <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Button}}, Path=IsMouseOver}" Value="True">
     119 + <Setter Property="Fill" Value="Red" />
     120 + </DataTrigger>
     121 + </Style.Triggers>
     122 + </Style>
     123 + </Rectangle.Style>
     124 + </Rectangle>
     125 + </Button>
     126 + </StackPanel>
     127 + </Grid>
     128 + </Border>
     129 + </DataTemplate>
     130 + </dragablz:TabablzControl.HeaderItemTemplate>
     131 + </dragablz:TabablzControl>
    135 132   <Grid Grid.Column="0" VerticalAlignment="Center">
    136 133   <Grid.Style>
    137 134   <Style TargetType="{x:Type Grid}">
    skipped 378 lines
  • ■ ■ ■ ■ ■ ■
    Source/NETworkManager/Views/WebConsoleHostView.xaml
    skipped 5 lines
    6 6   xmlns:dragablz="clr-namespace:Dragablz;assembly=Dragablz"
    7 7   xmlns:iconPacks="http://metro.mahapps.com/winfx/xaml/iconpacks"
    8 8   xmlns:converters="clr-namespace:NETworkManager.Converters;assembly=NETworkManager.Converters"
    9  - xmlns:airspaceFixer="clr-namespace:AirspaceFixer;assembly=AirspaceFixer"
    10 9   xmlns:dialogs="clr-namespace:MahApps.Metro.Controls.Dialogs;assembly=MahApps.Metro"
    11 10   xmlns:viewModels="clr-namespace:NETworkManager.ViewModels"
    12 11   xmlns:localization="clr-namespace:NETworkManager.Localization.Resources;assembly=NETworkManager.Localization"
    skipped 27 lines
    40 39   <ColumnDefinition Width="Auto" />
    41 40   <ColumnDefinition MinWidth="{x:Static settings:GlobalStaticConfiguration.Profile_WidthCollapsed}" Width="{Binding ProfileWidth, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" MaxWidth="{x:Static settings:GlobalStaticConfiguration.Profile_MaxWidthExpanded}" />
    42 41   </Grid.ColumnDefinitions>
    43  - <airspaceFixer:AirspacePanel Grid.Column="0" Grid.Row="0" FixAirspace="{Binding Source={x:Static settings:ConfigurationManager.Current}, Path=IsDialogOpen}">
    44  - <dragablz:TabablzControl ClosingItemCallback="{Binding CloseItemCommand}" ItemsSource="{Binding TabItems}" SelectedIndex="{Binding SelectedTabIndex}" Visibility="{Binding Source={x:Static settings:ConfigurationManager.Current}, Path=IsDialogOpen, Converter={StaticResource BooleanReverseToVisibilityCollapsedConverter}}">
    45  - <dragablz:TabablzControl.Resources>
    46  - <wpfHelpers:BindingProxy x:Key="BindingProxy" Data="{Binding}" />
    47  - </dragablz:TabablzControl.Resources>
    48  - <dragablz:TabablzControl.InterTabController>
    49  - <dragablz:InterTabController InterTabClient="{Binding InterTabClient}" MoveWindowWithSolitaryTabs="False" x:Name="InterTabController" />
    50  - </dragablz:TabablzControl.InterTabController>
    51  - <dragablz:TabablzControl.HeaderSuffixContent>
    52  - <Grid HorizontalAlignment="Right" Width="32" Height="32">
    53  - <Button Style="{StaticResource CleanButton}" Command="{Binding ConnectCommand}" ToolTip="{x:Static localization:Strings.NewConnectionDots}" Focusable="False">
    54  - <Rectangle Width="16" Height="16">
    55  - <Rectangle.OpacityMask>
    56  - <VisualBrush Stretch="Fill" Visual="{iconPacks:Material Kind=Plus}" />
    57  - </Rectangle.OpacityMask>
    58  - <Rectangle.Style>
    59  - <Style TargetType="{x:Type Rectangle}">
    60  - <Setter Property="Fill" Value="{DynamicResource MahApps.Brushes.Gray3}" />
    61  - <Style.Triggers>
    62  - <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Button}}, Path=IsMouseOver}" Value="True">
    63  - <Setter Property="Fill" Value="{DynamicResource MahApps.Brushes.Gray5}" />
    64  - </DataTrigger>
    65  - </Style.Triggers>
    66  - </Style>
    67  - </Rectangle.Style>
    68  - </Rectangle>
    69  - </Button>
    70  - </Grid>
    71  - </dragablz:TabablzControl.HeaderSuffixContent>
    72  - <dragablz:TabablzControl.HeaderItemTemplate>
    73  - <DataTemplate DataType="controls:DragablzTabItem">
    74  - <Border BorderBrush="{DynamicResource MahApps.Brushes.Gray8}" BorderThickness="0,0,1,0">
    75  - <Grid Height="32">
    76  - <Grid.ContextMenu>
    77  - <ContextMenu>
    78  - <MenuItem Header="{x:Static localization:Strings.Reload}" Command="{Binding Data.ReloadCommand, Source={StaticResource BindingProxy}}" CommandParameter="{Binding View}">
    79  - <MenuItem.Icon>
    80  - <Rectangle Width="16" Height="16" Fill="{DynamicResource MahApps.Brushes.Gray3}">
    81  - <Rectangle.OpacityMask>
    82  - <VisualBrush Stretch="Uniform" Visual="{iconPacks:Material Kind=Refresh}" />
    83  - </Rectangle.OpacityMask>
    84  - </Rectangle>
    85  - </MenuItem.Icon>
    86  - </MenuItem>
    87  - </ContextMenu>
    88  - </Grid.ContextMenu>
    89  - <Grid.InputBindings>
    90  - <MouseBinding Command="dragablz:TabablzControl.CloseItemCommand" Gesture="MiddleClick" />
    91  - </Grid.InputBindings>
    92  - <StackPanel Orientation="Horizontal">
    93  - <Grid ToolTip="{Binding Header}">
    94  - <TextBlock Text="{Binding Header}" Width="150" Margin="10,0" VerticalAlignment="Center">
    95  - <TextBlock.Style>
    96  - <Style TargetType="{x:Type TextBlock}" BasedOn="{StaticResource HeaderTextBlock}">
    97  - <Setter Property="Foreground" Value="{DynamicResource MahApps.Brushes.Gray3}" />
    98  - <Style.Triggers>
    99  - <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type dragablz:DragablzItem}}, Path=IsMouseOver}" Value="True">
    100  - <Setter Property="Foreground" Value="{DynamicResource MahApps.Brushes.Gray5}" />
    101  - </DataTrigger>
    102  - <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type dragablz:DragablzItem}}, Path=IsSelected}" Value="True">
    103  - <Setter Property="Foreground" Value="{DynamicResource MahApps.Brushes.Accent}" />
    104  - </DataTrigger>
    105  - </Style.Triggers>
    106  - </Style>
    107  - </TextBlock.Style>
    108  - </TextBlock>
    109  - <Thumb Style="{DynamicResource InvisibleThumbStyle}" dragablz:DragablzItem.IsCustomThumb="True" />
    110  - </Grid>
    111  - <Button Style="{StaticResource CleanButton}" Command="dragablz:TabablzControl.CloseItemCommand" ToolTip="{x:Static localization:Strings.Close}" Margin="0,0,10,0">
    112  - <Rectangle Width="16" Height="16">
    113  - <Rectangle.OpacityMask>
    114  - <VisualBrush Stretch="Uniform" Visual="{iconPacks:Material Kind=WindowClose}" />
    115  - </Rectangle.OpacityMask>
    116  - <Rectangle.Style>
    117  - <Style TargetType="{x:Type Rectangle}">
    118  - <Setter Property="Fill" Value="{DynamicResource MahApps.Brushes.Gray3}" />
    119  - <Style.Triggers>
    120  - <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Button}}, Path=IsMouseOver}" Value="True">
    121  - <Setter Property="Fill" Value="Red" />
    122  - </DataTrigger>
    123  - </Style.Triggers>
    124  - </Style>
    125  - </Rectangle.Style>
    126  - </Rectangle>
    127  - </Button>
    128  - </StackPanel>
    129  - </Grid>
    130  - </Border>
    131  - </DataTemplate>
    132  - </dragablz:TabablzControl.HeaderItemTemplate>
    133  - </dragablz:TabablzControl>
    134  - </airspaceFixer:AirspacePanel>
     42 + <dragablz:TabablzControl Grid.Column="0" Grid.Row="0" ClosingItemCallback="{Binding CloseItemCommand}" ItemsSource="{Binding TabItems}" SelectedIndex="{Binding SelectedTabIndex}" Visibility="{Binding Source={x:Static settings:ConfigurationManager.Current}, Path=IsDialogOpen, Converter={StaticResource BooleanReverseToVisibilityCollapsedConverter}}">
     43 + <dragablz:TabablzControl.Resources>
     44 + <wpfHelpers:BindingProxy x:Key="BindingProxy" Data="{Binding}" />
     45 + </dragablz:TabablzControl.Resources>
     46 + <dragablz:TabablzControl.InterTabController>
     47 + <dragablz:InterTabController InterTabClient="{Binding InterTabClient}" MoveWindowWithSolitaryTabs="False" x:Name="InterTabController" />
     48 + </dragablz:TabablzControl.InterTabController>
     49 + <dragablz:TabablzControl.HeaderSuffixContent>
     50 + <Grid HorizontalAlignment="Right" Width="32" Height="32">
     51 + <Button Style="{StaticResource CleanButton}" Command="{Binding ConnectCommand}" ToolTip="{x:Static localization:Strings.NewConnectionDots}" Focusable="False">
     52 + <Rectangle Width="16" Height="16">
     53 + <Rectangle.OpacityMask>
     54 + <VisualBrush Stretch="Fill" Visual="{iconPacks:Material Kind=Plus}" />
     55 + </Rectangle.OpacityMask>
     56 + <Rectangle.Style>
     57 + <Style TargetType="{x:Type Rectangle}">
     58 + <Setter Property="Fill" Value="{DynamicResource MahApps.Brushes.Gray3}" />
     59 + <Style.Triggers>
     60 + <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Button}}, Path=IsMouseOver}" Value="True">
     61 + <Setter Property="Fill" Value="{DynamicResource MahApps.Brushes.Gray5}" />
     62 + </DataTrigger>
     63 + </Style.Triggers>
     64 + </Style>
     65 + </Rectangle.Style>
     66 + </Rectangle>
     67 + </Button>
     68 + </Grid>
     69 + </dragablz:TabablzControl.HeaderSuffixContent>
     70 + <dragablz:TabablzControl.HeaderItemTemplate>
     71 + <DataTemplate DataType="controls:DragablzTabItem">
     72 + <Border BorderBrush="{DynamicResource MahApps.Brushes.Gray8}" BorderThickness="0,0,1,0">
     73 + <Grid Height="32">
     74 + <Grid.ContextMenu>
     75 + <ContextMenu>
     76 + <MenuItem Header="{x:Static localization:Strings.Reload}" Command="{Binding Data.ReloadCommand, Source={StaticResource BindingProxy}}" CommandParameter="{Binding View}">
     77 + <MenuItem.Icon>
     78 + <Rectangle Width="16" Height="16" Fill="{DynamicResource MahApps.Brushes.Gray3}">
     79 + <Rectangle.OpacityMask>
     80 + <VisualBrush Stretch="Uniform" Visual="{iconPacks:Material Kind=Refresh}" />
     81 + </Rectangle.OpacityMask>
     82 + </Rectangle>
     83 + </MenuItem.Icon>
     84 + </MenuItem>
     85 + </ContextMenu>
     86 + </Grid.ContextMenu>
     87 + <Grid.InputBindings>
     88 + <MouseBinding Command="dragablz:TabablzControl.CloseItemCommand" Gesture="MiddleClick" />
     89 + </Grid.InputBindings>
     90 + <StackPanel Orientation="Horizontal">
     91 + <Grid ToolTip="{Binding Header}">
     92 + <TextBlock Text="{Binding Header}" Width="150" Margin="10,0" VerticalAlignment="Center">
     93 + <TextBlock.Style>
     94 + <Style TargetType="{x:Type TextBlock}" BasedOn="{StaticResource HeaderTextBlock}">
     95 + <Setter Property="Foreground" Value="{DynamicResource MahApps.Brushes.Gray3}" />
     96 + <Style.Triggers>
     97 + <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type dragablz:DragablzItem}}, Path=IsMouseOver}" Value="True">
     98 + <Setter Property="Foreground" Value="{DynamicResource MahApps.Brushes.Gray5}" />
     99 + </DataTrigger>
     100 + <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type dragablz:DragablzItem}}, Path=IsSelected}" Value="True">
     101 + <Setter Property="Foreground" Value="{DynamicResource MahApps.Brushes.Accent}" />
     102 + </DataTrigger>
     103 + </Style.Triggers>
     104 + </Style>
     105 + </TextBlock.Style>
     106 + </TextBlock>
     107 + <Thumb Style="{DynamicResource InvisibleThumbStyle}" dragablz:DragablzItem.IsCustomThumb="True" />
     108 + </Grid>
     109 + <Button Style="{StaticResource CleanButton}" Command="dragablz:TabablzControl.CloseItemCommand" ToolTip="{x:Static localization:Strings.Close}" Margin="0,0,10,0">
     110 + <Rectangle Width="16" Height="16">
     111 + <Rectangle.OpacityMask>
     112 + <VisualBrush Stretch="Uniform" Visual="{iconPacks:Material Kind=WindowClose}" />
     113 + </Rectangle.OpacityMask>
     114 + <Rectangle.Style>
     115 + <Style TargetType="{x:Type Rectangle}">
     116 + <Setter Property="Fill" Value="{DynamicResource MahApps.Brushes.Gray3}" />
     117 + <Style.Triggers>
     118 + <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Button}}, Path=IsMouseOver}" Value="True">
     119 + <Setter Property="Fill" Value="Red" />
     120 + </DataTrigger>
     121 + </Style.Triggers>
     122 + </Style>
     123 + </Rectangle.Style>
     124 + </Rectangle>
     125 + </Button>
     126 + </StackPanel>
     127 + </Grid>
     128 + </Border>
     129 + </DataTemplate>
     130 + </dragablz:TabablzControl.HeaderItemTemplate>
     131 + </dragablz:TabablzControl>
    135 132   <Grid Grid.Column="0" VerticalAlignment="Center">
    136 133   <Grid.Style>
    137 134   <Style TargetType="{x:Type Grid}">
    skipped 358 lines
  • ■ ■ ■ ■ ■
    Source/NETworkManager.Settings/ConfigurationInfo.cs
    1  -using System;
    2  -using System.ComponentModel;
    3  -using System.Runtime.CompilerServices;
     1 +using NETworkManager.Utilities;
     2 +using System;
    4 3   
    5 4  namespace NETworkManager.Settings;
    6 5   
    7  -public class ConfigurationInfo : INotifyPropertyChanged
     6 +public class ConfigurationInfo : PropertyChangedBase
    8 7  {
    9  - public event PropertyChangedEventHandler PropertyChanged;
    10  - 
    11  - protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    12  - {
    13  - PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    14  - }
    15  - 
    16 8   public bool IsAdmin { get; set; }
    17 9   public string ExecutionPath { get; set; }
    18 10   public string ApplicationFullName { get; set; }
    skipped 29 lines
  • ■ ■ ■ ■ ■
    Source/NETworkManager.Settings/SettingsInfo.cs
    skipped 16 lines
    17 17   
    18 18  namespace NETworkManager.Settings;
    19 19   
    20  -public class SettingsInfo : INotifyPropertyChanged
     20 +public class SettingsInfo : PropertyChangedBase
    21 21  {
    22  - #region Events
    23  - public event PropertyChangedEventHandler PropertyChanged;
    24  - 
    25  - protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    26  - {
    27  - PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    28  - }
    29  - #endregion
    30  - 
    31 22   #region Variables
    32 23   [XmlIgnore] public bool SettingsChanged { get; set; }
    33 24   
    skipped 4102 lines
  • ■ ■ ■ ■ ■ ■
    Source/NETworkManager.Utilities/PropertyChangedBase.cs
     1 +using System.ComponentModel;
     2 +using System.Runtime.CompilerServices;
     3 + 
     4 +namespace NETworkManager.Utilities;
     5 + 
     6 +public abstract class PropertyChangedBase : INotifyPropertyChanged
     7 +{
     8 + public event PropertyChangedEventHandler PropertyChanged;
     9 + 
     10 + protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
     11 + {
     12 + PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
     13 + }
     14 +}
     15 + 
  • ■ ■ ■ ■ ■ ■
    docs/02_Features.md
    skipped 7 lines
    8 8   
    9 9  # Features
    10 10   
    11  -- [Dashboard](Documentation/Application/Dashboard)
    12  -- [Network Interface](Documentation/Application/NetworkInterface) - Information, Bandwidth, Configure
    13  -- [WiFi](Documentation/Application/WiFi) - Networks, Channels
    14  -- [IP Scanner](Documentation/Application/IPScanner)
    15  -- [Port Scanner](Documentation/Application/PortScanner)
    16  -- [Ping Monitor](Documentation/Application/PingMonitor)
    17  -- [Traceroute](Documentation/Application/Traceroute)
    18  -- [DNS Lookup](Documentation/Application/DNSLookup)
    19  -- [Remote Desktop](Documentation/Application/RemoteDesktop)
    20  -- [PowerShell](Documentation/Application/PowerShell)
    21  -- [PuTTY](Documentation/Application/PuTTY) (requires [PuTTY](https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html){:target="\_blank"})
    22  -- [AWS Session Manager](Documentation/Application/AWSSessionManager) (requires [AWS CLI](https://aws.amazon.com/cli/){:target="\_blank"} and [AWS Session Manager plugin](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-working-with-install-plugin.html){:target="\_blank"})
    23  -- [TigerVNC](Documentation/Application/TigerVNC) (requires [TigerVNC](https://tigervnc.org/){:target="\_blank"})
    24  -- [Web Console](Documentation/Application/WebConsole) (requires [Microsoft Edge - WebView2 Runtime](https://developer.microsoft.com/en-us/microsoft-edge/webview2/){:target="\_blank"})
    25  -- [SNMP](Documentation/Application/SNMP) - Get, Walk, Set
    26  -- [SNTP Lookup](Documentation/Application/SNTPLookup)
    27  -- [Discovery Protocol](Documentation/Application/DiscoveryProtocol) - LLDP, CDP
    28  -- [Wake on LAN](Documentation/Application/WakeOnLAN)
    29  -- [Whois](Documentation/Application/Whois)
    30  -- [Subnet Calculator](Documentation/Application/SubnetCalculator) - Calculator, Subnetting, Supernetting
    31  -- [Bit Calculator](Documentation/Application/BitCalculator)
    32  -- [Lookup](Documentation/Application/Lookup) - OUI, Port
    33  -- [Connections](Documentation/Application/Connections)
    34  -- [Listeners](Documentation/Application/Listeners)
    35  -- [ARP Table](Documentation/Application/ARPTable)
     11 +- [Dashboard](/NETworkManager/Documentation/Application/Dashboard)
     12 +- [Network Interface](/NETworkManager/Documentation/Application/NetworkInterface) - Information, Bandwidth, Configure
     13 +- [WiFi](/NETworkManager/Documentation/Application/WiFi) - Networks, Channels
     14 +- [IP Scanner](/NETworkManager/Documentation/Application/IPScanner)
     15 +- [Port Scanner](/NETworkManager/Documentation/Application/PortScanner)
     16 +- [Ping Monitor](/NETworkManager/Documentation/Application/PingMonitor)
     17 +- [Traceroute](/NETworkManager/Documentation/Application/Traceroute)
     18 +- [DNS Lookup](/NETworkManager/Documentation/Application/DNSLookup)
     19 +- [Remote Desktop](/NETworkManager/Documentation/Application/RemoteDesktop)
     20 +- [PowerShell](/NETworkManager/Documentation/Application/PowerShell)
     21 +- [PuTTY](/NETworkManager/Documentation/Application/PuTTY) (requires [PuTTY](https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html){:target="\_blank"})
     22 +- [AWS Session Manager](/NETworkManager/Documentation/Application/AWSSessionManager) (requires [AWS CLI](https://aws.amazon.com/cli/){:target="\_blank"} and [AWS Session Manager plugin](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-working-with-install-plugin.html){:target="\_blank"})
     23 +- [TigerVNC](/NETworkManager/Documentation/Application/TigerVNC) (requires [TigerVNC](https://tigervnc.org/){:target="\_blank"})
     24 +- [Web Console](/NETworkManager/Documentation/Application/WebConsole) (requires [Microsoft Edge - WebView2 Runtime](https://developer.microsoft.com/en-us/microsoft-edge/webview2/){:target="\_blank"})
     25 +- [SNMP](/NETworkManager/Documentation/Application/SNMP) - Get, Walk, Set
     26 +- [SNTP Lookup](/NETworkManager/Documentation/Application/SNTPLookup)
     27 +- [Discovery Protocol](/NETworkManager/Documentation/Application/DiscoveryProtocol) - LLDP, CDP
     28 +- [Wake on LAN](/NETworkManager/Documentation/Application/WakeOnLAN)
     29 +- [Whois](/NETworkManager/Documentation/Application/Whois)
     30 +- [Subnet Calculator](/NETworkManager/Documentation/Application/SubnetCalculator) - Calculator, Subnetting, Supernetting
     31 +- [Bit Calculator](/NETworkManager/Documentation/Application/BitCalculator)
     32 +- [Lookup](/NETworkManager/Documentation/Application/Lookup) - OUI, Port
     33 +- [Connections](/NETworkManager/Documentation/Application/Connections)
     34 +- [Listeners](/NETworkManager/Documentation/Application/Listeners)
     35 +- [ARP Table](/NETworkManager/Documentation/Application/ARPTable)
    36 36   
    37 37  ## Profiles
    38 38   
    skipped 10 lines
  • ■ ■ ■ ■
    docs/03_Download.md
    skipped 58 lines
    59 59  </table>
    60 60   
    61 61  {: .note }
    62  -If you don't see the new features ([AWS Session Manager](./Documentation/Application/AWSSessionManager), [Bit Calculator](./Documentation/Application/BitCalculator) or [SNTP Lookup](./Documentation/Application/SNTPLookup)), try to reset the settings. You can do this under [`Settings > Settings > Reset`](./Documentation/Settings/Settings#reset) or by starting the application with the following parameter [`NETworkManager.exe --reset-settings`](./Documentation/CommandLineArguments#--reset-settings). The profiles are not affected when the settings are reset.
     62 +If you don't see the new features ([AWS Session Manager](/NETworkManager//Documentation/Application/AWSSessionManager), [Bit Calculator](/NETworkManager//Documentation/Application/BitCalculator) or [SNTP Lookup](/NETworkManager//Documentation/Application/SNTPLookup)), try to reset the settings. You can do this under [`Settings > Settings > Reset`](/NETworkManager//Documentation/Settings/Settings#reset) or by starting the application with the following parameter [`NETworkManager.exe --reset-settings`](/NETworkManager//Documentation/CommandLineArguments#--reset-settings). The profiles are not affected when the settings are reset.
    63 63   
    64 64  Pre-release versions are available [here](https://github.com/BornToBeRoot/NETworkManager/releases){:target="\_blank"}.
    65 65   
    skipped 34 lines
  • ■ ■ ■ ■
    docs/Changelog/next-release.md
    skipped 21 lines
    22 22  ## Bugfixes
    23 23   
    24 24  ## Other
    25  - 
     25 +- Code cleanup [#2100](https://github.com/BornToBeRoot/NETworkManager/pull/2100){:target="\_blank"}
    26 26  - Language files updated [#transifex](https://github.com/BornToBeRoot/NETworkManager/pulls?q=author%3Aapp%2Ftransifex-integration){:target="\_blank"}
    27 27  - Dependencies updated [#dependencies](https://github.com/BornToBeRoot/NETworkManager/pulls?q=author%3Aapp%2Fdependabot){:target="\_blank"}
    28 28   
  • ■ ■ ■ ■
    docs/Documentation/01_Application/02_NetworkInterface.md
    skipped 18 lines
    19 19  In addition, further actions can be performed using the buttons at the bottom left:
    20 20   
    21 21  - **Network connections...** - Opens the `Control Panel > Network and Internet > Network Connections` window.
    22  -- **IP Scanner** - Opens the [IP Scanner](/Documentation/Application/IPScanner) tool and forwards the IPv4 address and subnetmask of the _selected_ network adapter.
     22 +- **IP Scanner** - Opens the [IP Scanner](/NETworkManager/Documentation/Application/IPScanner) tool and forwards the IPv4 address and subnetmask of the _selected_ network adapter.
    23 23  - **Flush DNS cache** - Flush the DNS cache (`ipconfig /flushdns`).
    24 24  - **Release & Renew**
    25 25   - **IPv4**
    skipped 134 lines
  • ■ ■ ■ ■ ■ ■
    docs/Documentation/01_Application/04_IPScanner.md
    skipped 123 lines
    124 124  **Default:** `22; 53; 80; 139; 389; 636; 443; 445; 3389`
    125 125   
    126 126  {: .note }
    127  -Multiple ports and port ranges can be combined with a semicolon (e.g. `22; 80; 443`). Only common and known ports should be scanned to check if a host is reachable. Use the [Port Scanner](/Documentation/Application/PortScanner) for a detailed port scan.
     127 +Multiple ports and port ranges can be combined with a semicolon (e.g. `22; 80; 443`). Only common and known ports should be scanned to check if a host is reachable. Use the [Port Scanner](/NETworkManager/Documentation/Application/PortScanner) for a detailed port scan.
    128 128   
    129 129  ### Timeout (ms)
    130 130   
    skipped 47 lines
    178 178  Too many simultaneous requests may be blocked by a firewall. You can reduce the number of threads to avoid this, but this will increase the scan time.<br/><br/>Too many threads can also cause performance problems on the device.
    179 179   
    180 180  {: .note }
    181  -This setting only change the maximum number of concurrently executed threads per host scan. See also the [General](/Documentation/Settings/General) settings to configure the application wide thread pool.
     181 +This setting only change the maximum number of concurrently executed threads per host scan. See also the [General](/NETworkManager/Documentation/Settings/General) settings to configure the application wide thread pool.
    182 182   
    183 183  ### Max. concurrent port threads
    184 184   
    skipped 7 lines
    192 192  Too many simultaneous requests may be blocked by a firewall. You can reduce the number of threads to avoid this, but this will increase the scan time.<br/><br/>Too many threads can also cause performance problems on the device.
    193 193   
    194 194  {: .note }
    195  -This setting only change the maximum number of concurrently executed threads per port scan. See also the [General](/Documentation/Settings/General) settings to configure the application wide thread pool.
     195 +This setting only change the maximum number of concurrently executed threads per port scan. See also the [General](/NETworkManager/Documentation/Settings/General) settings to configure the application wide thread pool.
    196 196   
Please wait...
Page is in error, reload to recover