MainWindow.xaml.cs 7.8 KB

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

        /// <summary>
        /// Convert color from hex to Brush
        /// </summary>
        /// <param name="hex">hex string ex #ccff77</param>
        /// <returns>Brush color</returns>
        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");
        }
    }
}