aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Controls/MdiContainerControl.xaml.cs
diff options
context:
space:
mode:
authorRoy Ben-Shabat <Roy@Twine-s.com>2017-12-14 14:43:25 +0200
committerRoy Ben-Shabat <Roy@Twine-s.com>2017-12-14 14:43:25 +0200
commite352c4e5f742585e4feeb2ca3183bd4d0282a567 (patch)
treee93b09e5fc5ed12e0e4ae9b6d2e268e3bc0c5d1e /Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Controls/MdiContainerControl.xaml.cs
parentb6615cec573616c9b6469c010982dda689ee3844 (diff)
downloadTango-e352c4e5f742585e4feeb2ca3183bd4d0282a567.tar.gz
Tango-e352c4e5f742585e4feeb2ca3183bd4d0282a567.zip
Implemented new MDI Container Control !
Diffstat (limited to 'Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Controls/MdiContainerControl.xaml.cs')
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Controls/MdiContainerControl.xaml.cs102
1 files changed, 102 insertions, 0 deletions
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));
+ }
+ }
+}