Skip to content
This repository was archived by the owner on Sep 28, 2024. It is now read-only.

Added copy/paste to instruction editing grid #50

Merged
merged 1 commit into from
Dec 23, 2015
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 30 additions & 10 deletions Controls/Grid/InstructionGridControl.Designer.cs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

31 changes: 30 additions & 1 deletion Controls/Grid/InstructionGridControl.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
#region Imports

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using Mono.Cecil;
using Mono.Cecil.Cil;
Expand All @@ -34,11 +36,14 @@ namespace Reflexil.Editors
{
public partial class InstructionGridControl : BaseInstructionGridControl
{
#region Methods


#region Methods

public InstructionGridControl()
{
InitializeComponent();
_copiedItems = new List<Instruction>();
}

protected override void GridContextMenuStrip_Opened(object sender, EventArgs e)
Expand All @@ -48,6 +53,9 @@ protected override void GridContextMenuStrip_Opened(object sender, EventArgs e)
MenReplaceBody.Enabled = (!ReadOnly) && (OwnerDefinition != null) && (OwnerDefinition.Body != null);
MenDelete.Enabled = (!ReadOnly) && (SelectedItems.Length > 0);
MenDeleteAll.Enabled = (!ReadOnly) && (OwnerDefinition != null) && (OwnerDefinition.Body != null);

MenCopy.Enabled = (!ReadOnly) && (SelectedItems.Length > 0);
MenPaste.Enabled = (!ReadOnly) && (FirstSelectedItem != null) && (_copiedItems.Count > 0);
}

protected override void MenCreate_Click(object sender, EventArgs e)
Expand Down Expand Up @@ -158,6 +166,27 @@ private void MenReplaceNop_Click(object sender, EventArgs e)
RaiseGridUpdated();
}

private readonly List<Instruction> _copiedItems;

private void MenCopy_Click(object sender, EventArgs e)
{
_copiedItems.Clear();
foreach (var item in SelectedItems)
{
_copiedItems.Add(item);
}
}

private void MenPaste_Click(object sender, EventArgs e)
{
foreach (var item in _copiedItems)
{
var copy = new Instruction(item.OpCode, item.Operand);
OwnerDefinition.Body.GetILProcessor().InsertAfter(FirstSelectedItem, copy);
}
RaiseGridUpdated();
}

#endregion
}

Expand Down