using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;

using ActiproSoftware.Windows.Controls.Docking;
using ActiproSoftware.Windows.Controls.Ribbon;
using ActiproSoftware.Windows.Controls.Ribbon.Input;
using ActiproSoftware.Windows.Controls.Ribbon.Controls;

using agree;

namespace agree.Wpf
{
	class MyApplicationMenu : ApplicationMenu
	{
		public MyApplicationMenu()
		{
			SplitButton sb;
			Button b;

			sb = new SplitButton(ApplicationCommands.New);
			sb.Label = "New";
			sb.KeyTipAccessText = "N";
			sb.ImageSourceLarge = new BitmapImage(new Uri("/Images/New32.png", UriKind.Relative));
			this.Items.Add(sb);

			b = new Button(ApplicationCommands.Open);
			b.Label = "Open";
			b.KeyTipAccessText = "O";
			b.ImageSourceLarge = new BitmapImage(new Uri("/Images/Open32.png", UriKind.Relative));
			this.Items.Add(b);

			b = new Button(ApplicationCommands.Save);
			b.Label = "Save";
			b.KeyTipAccessText = "S";
			b.ImageSourceLarge = new BitmapImage(new Uri("/Images/Save32.png", UriKind.Relative));
			this.Items.Add(b);

			sb = new SplitButton(ApplicationCommands.New);
			sb.Label = "Save As";
			sb.KeyTipAccessText = "A";
			sb.ImageSourceLarge = new BitmapImage(new Uri("/Images/SaveAs32.png", UriKind.Relative));
			this.Items.Add(sb);

			b = new Button(ApplicationCommands.Print);
			b.Label = "Print";
			b.KeyTipAccessText = "P";
			b.ImageSourceLarge = new BitmapImage(new Uri("/Images/Print32.png", UriKind.Relative));
			this.Items.Add(b);
		}


	};


	class MyRibbon : Ribbon
	{
		public MyRibbon()
		{
			RibbonCommandUIManager.Register(MainWindow.optionSetting3d,
				new RibbonCommandUIProvider("3D", "/Resources/Images/Cube.png", "/Resources/Images/Bold16.png", "Do something in 3-D."));

			this.SetValue(System.Windows.Controls.DockPanel.DockProperty, System.Windows.Controls.Dock.Top);
			this.ApplicationMenu = new MyApplicationMenu();

			this.Tabs.Add(new HomeTab());
			this.Tabs.Add(new ViewTab());
			this.Tabs.Add(new ParseTab());
			this.Tabs.Add(new TestTab());
		}
	};

	class BaseTab : Tab
	{
		public BaseTab(String label, String key)
		{
			this.Label = label;
			this.KeyTipAccessText = key;
		}
	}

	class HomeTab : BaseTab
	{
		public HomeTab()
			: base("Home", "H")
		{
			this.Items.Add(ClipboardGroup());
			this.Items.Add(FontGroup());
			this.Items.Add(ViewGroup());
		}

		Group ClipboardGroup()
		{
			Button b;
			Group grp = new Group();
			grp.Label = "Clipboard";

			b = new Button(ApplicationCommands.Paste);
			b.Label = "Paste";
			b.KeyTipAccessText = "P";
			b.ImageSourceLarge = new BitmapImage(new Uri("/Images/Paste32.png", UriKind.Relative));
			grp.Items.Add(b);

			//StackPanel sp = new StackPanel();

			b = new Button(ApplicationCommands.Cut);
			b.KeyTipAccessText = "X";
			b.Label = "Cut";
			//sp.Children.Add(b);
			b.ImageSourceLarge = new BitmapImage(new Uri("/Images/Cut32.png", UriKind.Relative));
			grp.Items.Add(b);

			b = new Button(ApplicationCommands.Copy);
			b.KeyTipAccessText = "C";
			b.Label = "Copy";
			//sp.Children.Add(b);
			b.ImageSourceLarge = new BitmapImage(new Uri("/Images/Copy32.png", UriKind.Relative));
			grp.Items.Add(b);

			//grp.Items.Add(sp);

			return grp;
		}

		Group FontGroup()
		{
			Group grp = new Group();
			grp.Label = "Font";

			return grp;
		}

		Group ViewGroup()
		{
			Button b;
			Group grp = new Group();
			grp.Label = "View";

			b = new Button();
			b.Command = MainWindow.optionSetting3d;
			b.CommandTarget = MainWindow.w;
			b.CommandBindings.Add(MainWindow.optionSetting3d.CommandBinding);
			b.Label = "3-D";
			//b.Click += (e, x) => MainWindow.optionSetting3d.Execute(null, MainWindow.w);
			b.ImageSourceLarge = new BitmapImage(new Uri("/Images/Cube.png", UriKind.Relative));
			grp.Items.Add(b);


			return grp;
		}

	};


	class ViewTab : BaseTab
	{
		public ViewTab()
			: base("View", "V")
		{
		}
	}

	class ParseTab : BaseTab
	{
		public ParseTab()
			: base("Parse", "P")
		{
		}
	}
	class TestTab : BaseTab
	{
		public TestTab()
			: base("Test", "T")
		{
		}
	}


	public class OptionSetting3d : CommandBase
	{
		static bool toggle_3d = false;

		public OptionSetting3d(MainWindow w)
			: base(w, "Toggle3d", "Toggle3d", typeof(OptionSetting3d))
		{
		}

		public bool Value { get { return toggle_3d; } }

		protected override void OnExecute(object target, ExecutedRoutedEventArgs args)
		{
			toggle_3d = !toggle_3d;

#if false
			ICheckableCommandParameter icp = args.Parameter as ICheckableCommandParameter;
			if (icp != null)
			{
				//icp.IsChecked = toggle_3d;
			}
			//(args.Source as Button).IsChecked = toggle_3d;
#endif
			//Debug.WriteLine("ex {0} {1} {2}", args.Source, args.OriginalSource, toggle_3d);
			args.Handled = true;
			//CommandManager.InvalidateRequerySuggested();
		}
		protected override void OnCanExecute(object target, CanExecuteRoutedEventArgs args)
		{
			ICheckableCommandParameter icp = args.Parameter as ICheckableCommandParameter;
			if (icp != null)
			{
				icp.Handled = true;
				icp.IsChecked = toggle_3d;
				//Debug.WriteLine("canex {0} {1} {2}", args.Source, args.OriginalSource, toggle_3d);
			}
			args.Handled = true;
			args.CanExecute = true;
		}
	};


}