using System;
using System.Collections.Generic;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using WPFProject.Controls;
using WPFProject.Models;
using WPFProject.UI.Test;
using WPFProject.Utils;
namespace WPFProject.UI
{
///
/// WorkControl.xaml 的交互逻辑
///
public partial class WorkControl : UserControl,IPlugin
{
public WorkControl()
{
InitializeComponent();
Loaded += UserControl_Loaded;
}
private List InitGridSize()
{
List result = new List();
result.Add(new CanvasPosition
{
Left = 0,
Top = 0,
Width = 0.1 * ActualWidth -2,
Height = 0.5 * ActualHeight - 2
});
result.Add(new CanvasPosition
{
Left = 0.1*ActualWidth +2,
Top = 0,
Width = 0.5* ActualWidth -4,
Height = ActualHeight,
});
result.Add(new CanvasPosition
{
Left = 0.6*ActualWidth+2,
Top = 0,
Width = 0.4*ActualWidth-2,
Height = 0.5 * ActualHeight - 2
});
result.Add(new CanvasPosition
{
Left = 0,
Top = 0.5*ActualHeight+2,
Width = 0.1 * ActualWidth - 2,
Height = 0.5 * ActualHeight - 2
});
result.Add(new CanvasPosition
{
Left = 0.6 * ActualWidth + 2,
Top = 0.5 * ActualHeight + 2,
Width = 0.4 * ActualWidth - 2,
Height = 0.5 * ActualHeight - 2
});
return result;
}
private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
List pos = InitGridSize();
ProgramList programList = new ProgramList();
InnerWindow p = new InnerWindow(pos[0])
{
Title = "程序列表",
Content = programList
};
HandleInnerWindow(p);
InnerWindow p1 = new InnerWindow(pos[1])
{
Title = "图片",
};
HandleInnerWindow(p1);
SequnceList sequnceList = new SequnceList();
programList.ProgramChanged += sequnceList.Selected_Program_Changed;
InnerWindow p2 = new InnerWindow(pos[2])
{
Title = "序列",
Content = sequnceList
};
HandleInnerWindow(p2);
FunctionSetting functionSetting = new FunctionSetting();
InnerWindow p3 = new InnerWindow(pos[3])
{
Title = "函数",
Content = functionSetting
};
HandleInnerWindow(p3);
StepSetting stepSetting = new StepSetting();
InnerWindow p4 = new InnerWindow(pos[4])
{
Title = "单步设置",
Content = stepSetting
};
HandleInnerWindow(p4);
SizeChanged += WorkControl_SizeChanged;
Loaded -= UserControl_Loaded;
}
public int CanvasChildrenCount { get; private set; } = 0;
private void HandleInnerWindow(InnerWindow inner)
{
inner.MinEvent += InnerWindowMin;
inner.MaxEvent += InnerWindowMax;
inner.ZIndexEvent += Inner_ZIndexEvent;
inner.GotFocus += Inner_GotFocus;
inner.AttachToCanvas(WorkArea);
inner.Zindex = CanvasChildrenCount++;
}
private void Inner_GotFocus(object sender, RoutedEventArgs e)
{
CanvasHelper.SetTopZIndex(sender as InnerWindow, WorkArea, typeof(InnerWindow));
}
private void Inner_ZIndexEvent(object sender, EventArgs e)
{
CanvasHelper.SetTopZIndex(sender as InnerWindow, WorkArea, typeof(InnerWindow));
}
private void HandleMinInnerWindow(InnerWindow inner)
{
MinInnerWindow min = new MinInnerWindow(inner);
min.MaxEvent += MinInnerWindowMax;
min.CloseEvent += MinInnerWindowClose;
BottomBar.AddMinWindow(min);
}
private void InnerWindowMin(object sender, System.EventArgs e)
{
InnerWindow inner = sender as InnerWindow;
inner.Visibility = Visibility.Collapsed;
HandleMinInnerWindow(inner);
}
private void InnerWindowMax(object sender, System.EventArgs e)
{
InnerWindow inner = sender as InnerWindow;
if (inner.WindowState == WindowState.Maximized)
{
Canvas.SetLeft(inner, inner.canvasPosition.Left);
Canvas.SetTop(inner, inner.canvasPosition.Top);
inner.Width = inner.canvasPosition.Width;
inner.Height = inner.canvasPosition.Height;
inner.WindowState = WindowState.Normal;
}
else{
Canvas.SetLeft(inner, 0);
Canvas.SetTop(inner, 0);
inner.Width = WorkArea.ActualWidth;
inner.Height = WorkArea.ActualHeight;
inner.WindowState = WindowState.Maximized;
}
}
private void MinInnerWindowMax(object sender, System.EventArgs e)
{
MinInnerWindow min = sender as MinInnerWindow;
min.Inner.Visibility = Visibility.Visible;
CanvasHelper.SetTopZIndex(min.Inner, WorkArea, typeof(InnerWindow));
BottomBar.RemoveMinWindow(min);
}
private void MinInnerWindowClose(object sender, System.EventArgs e)
{
MinInnerWindow min = sender as MinInnerWindow;
BottomBar.RemoveMinWindow(min);
}
private void WorkControl_SizeChanged(object sender, SizeChangedEventArgs e)
{
Size newSize = e.NewSize;
Size previousSize = e.PreviousSize;
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(WorkArea); i++)
{
UIElement child = VisualTreeHelper.GetChild(WorkArea, i) as UIElement;
if (Canvas.GetLeft(child) >= newSize.Width)
{
Canvas.SetLeft(child, Canvas.GetLeft(child) + newSize.Width - previousSize.Width);
}
if (Canvas.GetTop(child) >= newSize.Height)
{
Canvas.SetTop(child, Canvas.GetTop(child) + newSize.Height - previousSize.Height);
}
}
}
public void OnTabChange(object sender, SelectionChangedEventArgs args)
{
if (args.AddedItems.Count > 0)
{
IconTabItem newTab = args.AddedItems[0] as IconTabItem;
if (newTab != null && newTab.Content == this)
{
}
}
if (args.RemovedItems.Count > 0)
{
IconTabItem oldTab = args.RemovedItems[0] as IconTabItem;
if (oldTab != null && oldTab.Content == this)
{
}
}
}
}
}