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"); } } }