using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Shapes;
namespace RoboforkApp
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
SetDefaultForWindow();
SetLanguageDictionary();
}
private void SetDefaultForWindow()
{
FrameworkElement.StyleProperty.OverrideMetadata(typeof(Window), new FrameworkPropertyMetadata
{
DefaultValue = FindResource(typeof(Window))
});
}
private void SetLanguageDictionary()
{
ResourceDictionary dict = new ResourceDictionary();
switch (Thread.CurrentThread.CurrentCulture.ToString())
{
case "en-US":
dict.Source = new Uri("..\\Resources\\LangResources.xaml", UriKind.Relative);
break;
case "fr-CA":
dict.Source = new Uri("..\\Resources\\LangResources.ja-JP.xaml", UriKind.Relative);
break;
default:
dict.Source = new Uri("..\\Resources\\LangResources.xaml", UriKind.Relative);
break;
}
this.Resources.MergedDictionaries.Add(dict);
}
private void OnClickNew(object sender, RoutedEventArgs args)
{
MyDesignerCanvas.Children.Clear();
}
private void OnClickRotateLeft(object sender, RoutedEventArgs args)
{
Rotate(-90);
}
private void OnClickRotateRight(object sender, RoutedEventArgs args)
{
Rotate(90);
}
// sort of a hack, only values of 90 (right) or -90 (left) make sense
// for demo purposes only
private void Rotate(double angle)
{
foreach (DesignerItem item in MyDesignerCanvas.SelectedItems)
{
FrameworkElement element = item.Content as FrameworkElement;
if (element != null)
{
RotateTransform rotateTransform = element.LayoutTransform as RotateTransform;
if (rotateTransform == null)
{
rotateTransform = new RotateTransform();
element.LayoutTransform = rotateTransform;
}
rotateTransform.Angle = (rotateTransform.Angle + angle) % 360;
Canvas.SetLeft(item, Canvas.GetLeft(item) - (item.Height - item.Width) / 2);
Canvas.SetTop(item, Canvas.GetTop(item) - (item.Width - item.Height) / 2);
double width = item.Width;
item.Width = item.Height;
item.Height = width;
}
}
}
private void OnClickQuitApp(object sender, RoutedEventArgs e)
{
Application.Current.Shutdown();
}
private void btnMenu_Click(object sender, RoutedEventArgs e)
{
string tag = ((Button)sender).Tag.ToString();
switch (tag)
{
case "SetupRestriction":
StopFocusAllButton();
((Button)sender).Background = GetBrushesFromHex("#bee6fd");
DoBeginSetupRestriction();
break;
case "SetupRoute":
StopFocusAllButton();
((Button)sender).Background = GetBrushesFromHex("#bee6fd");
DoBeginSetupRoute();
break;
case "MakeRoot":
StopFocusAllButton();
((Button)sender).Background = GetBrushesFromHex("#bee6fd");
DoBeginMakeRoot();
DoBeginDspRouteInfo();
break;
case "SetStart":
StopFocusAllButton();
DoBeginSetStart();
break;
case "SetGoal":
StopFocusAllButton();
DoBeginSetGoal();
break;
case "SetAutoNodes":
StopFocusAllButton();
DoBeginSetAutoNotes();
break;
case "SetFreeNodes":
StopFocusAllButton();
((Button)sender).Background = GetBrushesFromHex("#bee6fd");
DoBeginSetFreeNotes();
break;
case "EditNode":
StopFocusAllButton();
((Button)sender).Background = GetBrushesFromHex("#bee6fd");
DoBeginEditNode();
break;
case "DeleteRoute":
StopFocusAllButton();
((Button)sender).Background = GetBrushesFromHex("#bee6fd");
DoBeginDeleteRoute();
break;
default:
break;
}
}
private void DoBeginDeleteRoute()
{
MessageBoxResult result = MessageBox.Show("Do you want delete route?", "Delete route", MessageBoxButton.OKCancel);
if (result == MessageBoxResult.OK)
{
MyDesignerCanvas.ClearRoute();
}
}
private void DoBeginSetAutoNotes()
{
MyDesignerCanvas.SetAutoNodes();
}
private void DoBeginSetFreeNotes()
{
MyDesignerCanvas.Init();
MyDesignerCanvas.Operation = DesignerCanvas.OperationState.DrawSetFreeNode;
}
private void DoBeginEditNode()
{
MyDesignerCanvas.InitNodeInfo_List();
MyDesignerCanvas.Operation = DesignerCanvas.OperationState.EditNode;
}
private void DoBeginSetGoal()
{
MyDesignerCanvas.CreateGoalPoint();
}
private void DoBeginSetStart()
{
MyDesignerCanvas.CreateStartPoint();
}
private void DoBeginMakeRoot()
{
MyDesignerCanvas.Children.Remove(MyDesignerCanvas.pRootLine);
MyDesignerCanvas.MakeRoot();
}
private void DoBeginDspRouteInfo()
{
MyDesignerCanvas.DspRouteInfo();
}
private void DoBeginSetupRoute()
{
MyDesignerCanvas.Operation = DesignerCanvas.OperationState.DrawRoute;
}
private void DoBeginSetupRestriction()
{
MyDesignerCanvas.Init();
MyDesignerCanvas.Operation = DesignerCanvas.OperationState.DrawObstract;
MyDesignerCanvas.mouseState = DesignerCanvas.MouseState.None;
}
///
/// Convert color from hex to Brush
///
/// hex string ex #ccff77
/// Brush color
private Brush GetBrushesFromHex(string hex)
{
var converter = new System.Windows.Media.BrushConverter();
var brush = (Brush)converter.ConvertFromString(hex);
return brush;
}
private void StopFocusAllButton()
{
btnSetupRestriction.Background = GetBrushesFromHex("#FFDDDDDD");
btnSetupRoute.Background = GetBrushesFromHex("#FFDDDDDD");
btnMakeRoot.Background = GetBrushesFromHex("#FFDDDDDD");
btnSetStart.Background = GetBrushesFromHex("#FFDDDDDD");
btnSetGoal.Background = GetBrushesFromHex("#FFDDDDDD");
btnDeleteRoute.Background = GetBrushesFromHex("#FFDDDDDD");
btnSetFreeNodes.Background = GetBrushesFromHex("#FFDDDDDD");
}
}
}