using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Controls.Ribbon;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.IO;

namespace Menuband
{
    /// <summary>
    /// Interaktionslogik für MainWindow.xaml
    /// </summary>
    public partial class MainWindow : RibbonWindow
    {
        public MainWindow()
        {
            InitializeComponent();

            // Befehle für Anwendungsmenü registrieren
            CommandBindings.Add(new CommandBinding(ApplicationCommands.New,
                                miFileNew_Handler));
            CommandBindings.Add(new CommandBinding(ApplicationCommands.Open,
                                miFileOpen_Handler));
            CommandBindings.Add(new CommandBinding(ApplicationCommands.Save,
                                miFileSave_Handler));
            CommandBindings.Add(new CommandBinding(ApplicationCommands.SaveAs,
                                miFileSaveAs_Handler));
            CommandBindings.Add(new CommandBinding(ApplicationCommands.Print,
                                miFilePrint_Handler));
            CommandBindings.Add(new CommandBinding(ApplicationCommands.Close,
                                miFileQuit_Handler));
            ApplicationCommands.Close.InputGestures.Add((new KeyGesture(Key.B, ModifierKeys.Control, "Strg+B")));

            // Befehle für Anwendungsmenü mit Oberflächenelementen verbinden
            miFileNew.Command = ApplicationCommands.New;
            miFileOpen.Command = ApplicationCommands.Open;
            miFileSave.Command = ApplicationCommands.Save;
            miFileSaveAs.Command = ApplicationCommands.SaveAs;
            miFilePrint.Command = ApplicationCommands.Print;
            miFileQuit.Command = ApplicationCommands.Close;
            btnSave.Command = ApplicationCommands.Save;

            // Die Befehle für die Zwischenablage sind schon erzeugt und registriert
            // Wir brauchen nur die Tastenkombinationen zu berichtigen
            ApplicationCommands.Cut.InputGestures.Clear();
            ApplicationCommands.Cut.InputGestures.Add((new KeyGesture(Key.X, ModifierKeys.Control, "Strg+X")));
            ApplicationCommands.Copy.InputGestures.Clear();
            ApplicationCommands.Copy.InputGestures.Add((new KeyGesture(Key.C, ModifierKeys.Control, "Strg+C")));
            ApplicationCommands.Paste.InputGestures.Clear();
            ApplicationCommands.Paste.InputGestures.Add((new KeyGesture(Key.V, ModifierKeys.Control, "Strg+V")));

            // Befehle für Zwischenablage mit Oberflächenelementen verbinden
            btnCut.Command = ApplicationCommands.Cut;
            btnCopy.Command = ApplicationCommands.Copy;
            btnPaste.Command = ApplicationCommands.Paste;

            // Kontextmenü
            cmiEditCut.Command = ApplicationCommands.Cut;
            cmiEditCopy.Command = ApplicationCommands.Copy;
            cmiEditPaste.Command = ApplicationCommands.Paste;

            // Installierte Schriftarten in Kombinationsfeld einlesen
            List<System.Windows.Media.FontFamily> col = Fonts.SystemFontFamilies.OrderBy(font => font.ToString()).ToList();
            fontsMenu.ItemsSource = col;
            fontsMenu.DisplayMemberPath = "Source";

            // Entweder Arial oder die erste Schriftart in der Liste auswählen
            if (col.Contains(new FontFamily("Arial")))
            {
                int index = col.FindIndex(delegate(FontFamily font) { if (font.ToString().Contains("Arial")) return true; else return false; });
                cbFonts.SelectedItem = col.ElementAt(index);
            }
            else
            {
                cbFonts.SelectedItem = col.ElementAt(0);
            }

        }


        // Ereignisbehandlungsmethoden für Anwendungsmenü
        void miFileNew_Handler(object sender, ExecutedRoutedEventArgs args)
        {
            MessageBox.Show("Befehl Datei/Neu", "Aufgerufen wurde:");
            sbInfo.Content = "Neues Dokument wurde angelegt";
        }
        void miFileOpen_Handler(object sender, ExecutedRoutedEventArgs args)
        {
            MessageBox.Show("Befehl Datei/Öffnen", "Aufgerufen wurde:");
            sbInfo.Content = "Dokument wurde geöffnet";
        }
        void miFileSave_Handler(object sender, ExecutedRoutedEventArgs args)
        {
            MessageBox.Show("Befehl Datei/Speichern", "Aufgerufen wurde:");
            sbInfo.Content = "Dokument wurde gespeichert";
        }
        void miFileSaveAs_Handler(object sender, ExecutedRoutedEventArgs args)
        {
            MessageBox.Show("Befehl Datei/Speichern unter", "Aufgerufen wurde:");
            sbInfo.Content = "Dokument wurde unter neuem Namen gespeichert";
        }
        void miFilePrint_Handler(object sender, ExecutedRoutedEventArgs args)
        {
            MessageBox.Show("Befehl Datei/Drucken", "Aufgerufen wurde:");
            sbInfo.Content = "Dokument wurde gedruckt";
        }

        void miFileQuit_Handler(object sender, ExecutedRoutedEventArgs args)
        {
            this.Close();
        }


    }
}
