aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Controls
diff options
context:
space:
mode:
Diffstat (limited to 'Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Controls')
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Controls/MdiChild.cs58
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Controls/MdiContainerControl.xaml75
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Controls/MdiContainerControl.xaml.cs102
3 files changed, 235 insertions, 0 deletions
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Controls/MdiChild.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Controls/MdiChild.cs
new file mode 100644
index 000000000..469e3fda5
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Controls/MdiChild.cs
@@ -0,0 +1,58 @@
+using MaterialDesignThemes.Wpf;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using Tango.Core.Commands;
+
+namespace Tango.MachineStudio.Common.Controls
+{
+ public class MdiChild : DependencyObject
+ {
+ public MdiChild()
+ {
+
+ }
+
+ public MdiChild(String header, FrameworkElement view) : this()
+ {
+ Header = header;
+ View = view;
+ }
+
+ public PackIconKind Icon
+ {
+ get { return (PackIconKind)GetValue(IconProperty); }
+ set { SetValue(IconProperty, value); }
+ }
+ public static readonly DependencyProperty IconProperty =
+ DependencyProperty.Register("Icon", typeof(PackIconKind), typeof(MdiChild), new PropertyMetadata(PackIconKind.LaptopWindows));
+
+ public String Header
+ {
+ get { return (String)GetValue(HeaderProperty); }
+ set { SetValue(HeaderProperty, value); }
+ }
+ public static readonly DependencyProperty HeaderProperty =
+ DependencyProperty.Register("Header", typeof(String), typeof(MdiChild), new PropertyMetadata(null));
+
+ public FrameworkElement View
+ {
+ get { return (FrameworkElement)GetValue(ViewProperty); }
+ set { SetValue(ViewProperty, value); }
+ }
+ public static readonly DependencyProperty ViewProperty =
+ DependencyProperty.Register("View", typeof(FrameworkElement), typeof(MdiChild), new PropertyMetadata(null));
+
+ public Point Location
+ {
+ get { return (Point)GetValue(LocationProperty); }
+ set { SetValue(LocationProperty, value); }
+ }
+ public static readonly DependencyProperty LocationProperty =
+ DependencyProperty.Register("Location", typeof(Point), typeof(MdiChild), new PropertyMetadata(new Point()));
+ }
+}
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Controls/MdiContainerControl.xaml b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Controls/MdiContainerControl.xaml
new file mode 100644
index 000000000..3896347fe
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Controls/MdiContainerControl.xaml
@@ -0,0 +1,75 @@
+<UserControl x:Class="Tango.MachineStudio.Common.Controls.MdiContainerControl"
+ xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+ xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
+ xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
+ xmlns:local="clr-namespace:Tango.MachineStudio.Common.Controls"
+ xmlns:converters="clr-namespace:Tango.MachineStudio.Common.Converters"
+ mc:Ignorable="d"
+ d:DesignHeight="300" d:DesignWidth="300" Background="White">
+
+ <UserControl.Resources>
+ <converters:PointToMarginConverter x:Key="PointToMarginConverter"></converters:PointToMarginConverter>
+ </UserControl.Resources>
+
+ <Grid>
+ <ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
+ <ItemsControl ItemsSource="{Binding RelativeSource={RelativeSource AncestorType=UserControl,Mode=FindAncestor},Path=ItemsSource}" x:Name="itemsControl">
+ <ItemsControl.ItemsPanel>
+ <ItemsPanelTemplate>
+ <Canvas x:Name="canvas" HorizontalAlignment="Left" VerticalAlignment="Top"></Canvas>
+ </ItemsPanelTemplate>
+ </ItemsControl.ItemsPanel>
+ <ItemsControl.ItemContainerStyle>
+ <Style TargetType="FrameworkElement">
+ <Setter Property="Canvas.Left" Value="{Binding Location.X}"></Setter>
+ <Setter Property="Canvas.Top" Value="{Binding Location.Y}"></Setter>
+ <EventSetter Event="PreviewMouseDown" Handler="OnControlMouseDown"></EventSetter>
+ </Style>
+ </ItemsControl.ItemContainerStyle>
+ <ItemsControl.ItemTemplate>
+ <DataTemplate>
+ <Grid>
+ <Grid.Effect>
+ <DropShadowEffect ShadowDepth="0" BlurRadius="10" />
+ </Grid.Effect>
+ <Grid>
+ <Grid.RowDefinitions>
+ <RowDefinition Height="25"/>
+ <RowDefinition Height="277*"/>
+ </Grid.RowDefinitions>
+
+ <Grid Background="{StaticResource AccentColorBrush}">
+ <Thumb Opacity="0" DragDelta="OnControlDragging" Tag="{Binding}"></Thumb>
+ <DockPanel LastChildFill="False">
+ <StackPanel IsHitTestVisible="False" DockPanel.Dock="Left" VerticalAlignment="Center" Orientation="Horizontal" Margin="5 0 0 0">
+ <materialDesign:PackIcon Kind="{Binding Icon}" Foreground="White"></materialDesign:PackIcon>
+ <TextBlock Margin="5 0 0 0" VerticalAlignment="Center" Foreground="White" Text="{Binding Header}"></TextBlock>
+ </StackPanel>
+
+ <StackPanel DockPanel.Dock="Right" VerticalAlignment="Center" Orientation="Horizontal">
+ <Button Foreground="White" Style="{StaticResource MaterialDesignFlatButton}" ToolTip="Close" Width="24" Height="24" Padding="0" Click="OnControlClosed" Tag="{Binding}">
+ <materialDesign:PackIcon Kind="WindowClose" />
+ </Button>
+ </StackPanel>
+ </DockPanel>
+ </Grid>
+
+ <Grid Grid.Row="1" MinWidth="100" MinHeight="100">
+ <ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
+ <ContentPresenter Content="{Binding View}"></ContentPresenter>
+ </ScrollViewer>
+
+ <Thumb HorizontalAlignment="Right" VerticalAlignment="Stretch" Opacity="0" Width="5" Cursor="SizeWE" DragDelta="OnControlSizeRight" Tag="{Binding}"></Thumb>
+ <Thumb HorizontalAlignment="Stretch" VerticalAlignment="Bottom" Opacity="0" Height="5" Cursor="SizeNS" DragDelta="OnControlSizeBottom" Tag="{Binding}"></Thumb>
+ <Thumb HorizontalAlignment="Right" VerticalAlignment="Bottom" Opacity="0" Height="10" Width="10" Cursor="SizeNWSE" DragDelta="OnControlResize" Tag="{Binding}"></Thumb>
+ </Grid>
+ </Grid>
+ </Grid>
+ </DataTemplate>
+ </ItemsControl.ItemTemplate>
+ </ItemsControl>
+ </ScrollViewer>
+ </Grid>
+</UserControl>
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Controls/MdiContainerControl.xaml.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Controls/MdiContainerControl.xaml.cs
new file mode 100644
index 000000000..dbf4ee74b
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Controls/MdiContainerControl.xaml.cs
@@ -0,0 +1,102 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Controls.Primitives;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+using Tango.SharedUI.Helpers;
+
+namespace Tango.MachineStudio.Common.Controls
+{
+ /// <summary>
+ /// Interaction logic for MdiContainerControl.xaml
+ /// </summary>
+ public partial class MdiContainerControl : UserControl
+ {
+ private const int MIN_SIZE = 200;
+
+ public MdiContainerControl()
+ {
+ InitializeComponent();
+ }
+
+ public IEnumerable ItemsSource
+ {
+ get { return (IEnumerable)GetValue(ItemsSourceProperty); }
+ set { SetValue(ItemsSourceProperty, value); }
+ }
+ public static readonly DependencyProperty ItemsSourceProperty =
+ DependencyProperty.Register("ItemsSource", typeof(IEnumerable), typeof(MdiContainerControl), new PropertyMetadata(null));
+
+ private void OnControlDragging(object sender, DragDeltaEventArgs e)
+ {
+ var mdiControl = GetSenderTag<MdiChild>(sender);
+ mdiControl.Location = new Point(mdiControl.Location.X + e.HorizontalChange, mdiControl.Location.Y + e.VerticalChange);
+ FitCanvas();
+ }
+
+ private T GetSenderTag<T>(object sender) where T : class
+ {
+ return (T)((sender as FrameworkElement).Tag);
+ }
+
+ private void FitCanvas()
+ {
+ Canvas canvas = GetCanvas();
+ canvas.Width = canvas.Children.OfType<FrameworkElement>().Max(x => Canvas.GetLeft(x) + x.ActualWidth);
+ canvas.Height = canvas.Children.OfType<FrameworkElement>().Max(x => Canvas.GetTop(x) + x.ActualHeight);
+ }
+
+ private Canvas GetCanvas()
+ {
+ return UIHelper.FindChild<Canvas>(itemsControl, "canvas");
+ }
+
+
+ private void OnControlMouseDown(object sender, MouseButtonEventArgs e)
+ {
+ Canvas.SetZIndex(sender as FrameworkElement, GetCanvas().Children.OfType<FrameworkElement>().Max(x => Canvas.GetZIndex(x) + 1));
+ }
+
+ private void OnControlSizeRight(object sender, DragDeltaEventArgs e)
+ {
+ var mdiControl = GetSenderTag<MdiChild>(sender);
+ if (double.IsNaN(mdiControl.View.Width)) mdiControl.View.Width = mdiControl.View.ActualWidth;
+ if (mdiControl.View.Width + e.HorizontalChange > MIN_SIZE) mdiControl.View.Width += e.HorizontalChange;
+ }
+
+ private void OnControlSizeBottom(object sender, DragDeltaEventArgs e)
+ {
+ var mdiControl = GetSenderTag<MdiChild>(sender);
+ if (double.IsNaN(mdiControl.View.Height)) mdiControl.View.Height = mdiControl.View.ActualHeight;
+ if (mdiControl.View.Height + e.VerticalChange > MIN_SIZE) mdiControl.View.Height += e.VerticalChange;
+ }
+
+ private void OnControlResize(object sender, DragDeltaEventArgs e)
+ {
+ var mdiControl = GetSenderTag<MdiChild>(sender);
+
+ if (double.IsNaN(mdiControl.View.Height)) mdiControl.View.Height = mdiControl.View.ActualHeight;
+ if (double.IsNaN(mdiControl.View.Width)) mdiControl.View.Width = mdiControl.View.ActualWidth;
+
+ if (mdiControl.View.Height + e.VerticalChange > MIN_SIZE) mdiControl.View.Height += e.VerticalChange;
+ if (mdiControl.View.Width + e.HorizontalChange > MIN_SIZE) mdiControl.View.Width += e.HorizontalChange;
+ }
+
+ private void OnControlClosed(object sender, RoutedEventArgs e)
+ {
+ (ItemsSource as IList).Remove(GetSenderTag<MdiChild>(sender));
+ }
+ }
+}