aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewsContracts/IMachineSetupView.cs
blob: 65b194f7b65ef1de40895720b98d6f2955249c76 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Tango.PPC.Common;
using static Tango.PPC.UI.ViewModels.MachineSetupViewVM;

namespace Tango.PPC.UI.ViewsContracts
{
    /// <summary>
    /// Represents the machine setup view contract.
    /// </summary>
    /// <seealso cref="Tango.PPC.Common.IPPCView" />
    public interface IMachineSetupView : IPPCView
    {
        /// <summary>
        /// Appends the log.
        /// </summary>
        /// <param name="log">The log.</param>
        void AppendLog(String log);

        /// <summary>
        /// Navigates to the specified machine setup view.
        /// </summary>
        /// <param name="view">The view.</param>
        Task NavigateTo(MachineSetupView view);
    }
}
an>; using System.Collections.Generic; using System.Windows; using System.Windows.Input; using Tango.Scripting.Editors.Document; namespace Tango.Scripting.Editors.Editing { /// <summary> /// Contains the predefined input handlers. /// </summary> public class TextAreaDefaultInputHandler : TextAreaInputHandler { /// <summary> /// Gets the caret navigation input handler. /// </summary> public TextAreaInputHandler CaretNavigation { get; private set; } /// <summary> /// Gets the editing input handler. /// </summary> public TextAreaInputHandler Editing { get; private set; } /// <summary> /// Gets the mouse selection input handler. /// </summary> public ITextAreaInputHandler MouseSelection { get; private set; } /// <summary> /// Creates a new TextAreaDefaultInputHandler instance. /// </summary> public TextAreaDefaultInputHandler(TextArea textArea) : base(textArea) { this.NestedInputHandlers.Add(CaretNavigation = CaretNavigationCommandHandler.Create(textArea)); this.NestedInputHandlers.Add(Editing = EditingCommandHandler.Create(textArea)); this.NestedInputHandlers.Add(MouseSelection = new SelectionMouseHandler(textArea)); this.CommandBindings.Add(new CommandBinding(ApplicationCommands.Undo, ExecuteUndo, CanExecuteUndo)); this.CommandBindings.Add(new CommandBinding(ApplicationCommands.Redo, ExecuteRedo, CanExecuteRedo)); } internal static KeyBinding CreateFrozenKeyBinding(ICommand command, ModifierKeys modifiers, Key key) { KeyBinding kb = new KeyBinding(command, key, modifiers); // Mark KeyBindings as frozen because they're shared between multiple editor instances. // KeyBinding derives from Freezable only in .NET 4, so we have to use this little trick: Freezable f = ((object)kb) as Freezable; if (f != null) f.Freeze(); return kb; } internal static void WorkaroundWPFMemoryLeak(List<InputBinding> inputBindings) { // Work around WPF memory leak: // KeyBinding retains a reference to whichever UIElement it is used in first. // Using a dummy element for this purpose ensures that we don't leak // a real text editor (with a potentially large document). UIElement dummyElement = new UIElement(); dummyElement.InputBindings.AddRange(inputBindings); } #region Undo / Redo UndoStack GetUndoStack() { TextDocument document = this.TextArea.Document; if (document != null) return document.UndoStack; else return null; } void ExecuteUndo(object sender, ExecutedRoutedEventArgs e) { var undoStack = GetUndoStack(); if (undoStack != null) { if (undoStack.CanUndo) { undoStack.Undo(); this.TextArea.Caret.BringCaretToView(); } e.Handled = true; } } void CanExecuteUndo(object sender, CanExecuteRoutedEventArgs e) { var undoStack = GetUndoStack(); if (undoStack != null) { e.Handled = true; e.CanExecute = undoStack.CanUndo; } } void ExecuteRedo(object sender, ExecutedRoutedEventArgs e) { var undoStack = GetUndoStack(); if (undoStack != null) { if (undoStack.CanRedo) { undoStack.Redo(); this.TextArea.Caret.BringCaretToView(); } e.Handled = true; } } void CanExecuteRedo(object sender, CanExecuteRoutedEventArgs e) { var undoStack = GetUndoStack(); if (undoStack != null) { e.Handled = true; e.CanExecute = undoStack.CanRedo; } } #endregion } }