Skip to content

Commit

Permalink
Source Control Changes View is Complete
Browse files Browse the repository at this point in the history
  • Loading branch information
rubberduck203 committed Mar 23, 2015
1 parent 0dc782a commit 707d5e8
Show file tree
Hide file tree
Showing 4 changed files with 122 additions and 68 deletions.
2 changes: 2 additions & 0 deletions RetailCoder.VBE/UI/SourceControl/ChangesPresenter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,8 @@ public void Refresh()

_view.IncludedChanges = fileStats.Where(stat => stat.FileStatus.HasFlag(FileStatus.Modified)).ToList();
_view.UntrackedFiles = fileStats.Where(stat => stat.FileStatus.HasFlag(FileStatus.Untracked)).ToList();

_view.ExcludedChanges = new List<IFileStatusEntry>();
}

public void Commit()
Expand Down
27 changes: 14 additions & 13 deletions RetailCoder.VBE/UI/SourceControl/SourceControlPanel.Designer.cs

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

144 changes: 89 additions & 55 deletions RetailCoder.VBE/UI/SourceControl/SourceControlPanel.cs
Original file line number Diff line number Diff line change
@@ -1,11 +1,8 @@
using System.Collections.Generic;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Drawing;
using System.Windows.Forms;
using Rubberduck.SourceControl;

Expand Down Expand Up @@ -42,7 +39,6 @@ public CommitAction CommitAction
set { this.CommitActionDropdown.SelectedIndex = (int)value; }
}

//bug: control panel isn't repainting
private BindingList<IFileStatusEntry> _includedChanges = new BindingList<IFileStatusEntry>();
public IList<IFileStatusEntry> IncludedChanges
{
Expand Down Expand Up @@ -85,53 +81,43 @@ public bool CommitEnabled
set { this.CommitButton.Enabled = value; }
}

public event System.EventHandler<System.EventArgs> SelectedActionChanged;
private void CommitActionDropdown_SelectedIndexChanged(object sender, System.EventArgs e)
public event EventHandler<EventArgs> SelectedActionChanged;
private void CommitActionDropdown_SelectedIndexChanged(object sender, EventArgs e)
{
var handler = SelectedActionChanged;
if (handler != null)
{
handler(this, e);
}
RaiseGenericEvent(SelectedActionChanged, e);
}

public event System.EventHandler<System.EventArgs> CommitMessageChanged;
private void CommitMessageBox_TextChanged(object sender, System.EventArgs e)
public event EventHandler<EventArgs> CommitMessageChanged;
private void CommitMessageBox_TextChanged(object sender, EventArgs e)
{
var handler = CommitMessageChanged;
if (handler != null)
{
handler(this, e);
}
RaiseGenericEvent(CommitMessageChanged, e);
}

public event System.EventHandler<System.EventArgs> Commit;
private void CommitButton_Click(object sender, System.EventArgs e)
public event EventHandler<EventArgs> Commit;
private void CommitButton_Click(object sender, EventArgs e)
{
var handler = Commit;
if (handler != null)
{
handler(this, e);
}
RaiseGenericEvent(Commit, e);
}

public event System.EventHandler<System.EventArgs> RefreshData;
private void RefreshButton_Click(object sender, System.EventArgs e)
public event EventHandler<EventArgs> RefreshData;
private void RefreshButton_Click(object sender, EventArgs e)
{
RaiseGenericEvent(RefreshData, e);
}

private void RaiseGenericEvent(EventHandler<EventArgs> handler, EventArgs e)
{
var handler = RefreshData;
if (handler != null)
{
handler(this, e);
}
}

#region DragDropHandling

private Rectangle _dragBox;
private int _row;

private void IncludedChangesGrid_MouseDown(object sender, MouseEventArgs e)
{
OnDataGridMouseDown((DataGridView)sender, e);
}
private Control _dragSource;

private void OnDataGridMouseDown(DataGridView sender, MouseEventArgs e)
{
Expand All @@ -140,7 +126,7 @@ private void OnDataGridMouseDown(DataGridView sender, MouseEventArgs e)
{
var dragSize = SystemInformation.DragSize;
_dragBox = new Rectangle(
new Point(e.X - dragSize.Width/2, e.Y - dragSize.Height/2),
new Point(e.X - dragSize.Width / 2, e.Y - dragSize.Height / 2),
dragSize
);
}
Expand All @@ -150,57 +136,105 @@ private void OnDataGridMouseDown(DataGridView sender, MouseEventArgs e)
}
}

private void IncludedChangesGrid_MouseMove(object sender, MouseEventArgs e)
{
OnDataGridMouseMove((DataGridView)sender, e);
}

private void OnDataGridMouseMove(DataGridView sender, MouseEventArgs e)
{
if (e.Button.HasFlag(MouseButtons.Left))
{
if (_dragBox != Rectangle.Empty && !_dragBox.Contains(e.X, e.Y))
{
DragDropEffects dropEffect = sender.DoDragDrop(sender.Rows[_row], DragDropEffects.Move);
_dragSource = sender;
if (_dragSource == this.UntrackedFilesGrid)
{
this.ExcludedChangesGrid.AllowDrop = false;
}

try
{
DragDropEffects dropEffect = sender.DoDragDrop(sender.Rows[_row], DragDropEffects.Move);
}
finally
{
this.ExcludedChangesGrid.AllowDrop = true;
_dragSource = null;
}
}
}
}

private void ExcludedChangesGrid_DragOver(object sender, DragEventArgs e)
private void ExcludedChangesGrid_DragDrop(object sender, DragEventArgs e)
{
e.Effect = DragDropEffects.Move;
if (_dragSource != null && _dragSource != this.UntrackedFilesGrid)
{
this.ExcludedChangesGrid.DataSource = MoveFileStatusItem(_excludedChanges, _includedChanges, _row);
}

}

private void ExcludedChangesGrid_DragDrop(object sender, DragEventArgs e)
private void IncludedChangesGrid_DragDrop(object sender, DragEventArgs e)
{
_excludedChanges.Add(_includedChanges[_row]);
this.ExcludedChangesGrid.DataSource = _excludedChanges;
if (_dragSource != null)
{
if (_dragSource == this.ExcludedChangesGrid)
{
this.IncludedChangesGrid.DataSource = MoveFileStatusItem(_includedChanges, _excludedChanges, _row);
}

_includedChanges.RemoveAt(_row);
if (_dragSource == this.UntrackedFilesGrid)
{
this.IncludedChangesGrid.DataSource = MoveFileStatusItem(_includedChanges, _untrackedFiles, _row);
}
}
}

private void ExcludedChangesGrid_MouseDown(object sender, MouseEventArgs e)
private IList<IFileStatusEntry> MoveFileStatusItem(IList<IFileStatusEntry> destination,
IList<IFileStatusEntry> source, int index)
{
destination.Add(source[index]);
source.RemoveAt(index);

return destination;
}

private void IncludedChangesGrid_MouseDown(object sender, MouseEventArgs e)
{
OnDataGridMouseDown((DataGridView)sender, e);
}

private void IncludedChangesGrid_DragDrop(object sender, DragEventArgs e)
private void IncludedChangesGrid_MouseMove(object sender, MouseEventArgs e)
{
_includedChanges.Add(_excludedChanges[_row]);
this.IncludedChangesGrid.DataSource = _includedChanges;

_excludedChanges.RemoveAt(_row);
OnDataGridMouseMove((DataGridView)sender, e);
}

private void IncludedChangesGrid_DragOver(object sender, DragEventArgs e)
{
e.Effect = DragDropEffects.Move;
}

private void ExcludedChangesGrid_MouseDown(object sender, MouseEventArgs e)
{
OnDataGridMouseDown((DataGridView)sender, e);
}

private void ExcludedChangesGrid_MouseMove(object sender, MouseEventArgs e)
{
OnDataGridMouseMove((DataGridView)sender, e);
}

private void ExcludedChangesGrid_DragOver(object sender, DragEventArgs e)
{
e.Effect = DragDropEffects.Move;
}

private void UntrackedFilesGrid_MouseDown(object sender, MouseEventArgs e)
{
OnDataGridMouseDown((DataGridView)sender, e);
}

private void UntrackedFilesGrid_MouseMove(object sender, MouseEventArgs e)
{
OnDataGridMouseMove((DataGridView)sender, e);
}

#endregion
}
}
17 changes: 17 additions & 0 deletions RubberduckTests/SourceControl/ChangesPresenterTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -170,5 +170,22 @@ public void RefreshChangesAfterCommit()
//assert
Assert.IsFalse(_viewMock.Object.IncludedChanges.Any());
}

[TestMethod]
public void ExcludedIsClearedAfterRefresh()
{
//arrange
_viewMock.SetupProperty(v => v.ExcludedChanges);
var presenter = new ChangesPresenter(_providerMock.Object, _viewMock.Object);
_viewMock.Object.ExcludedChanges = new List<IFileStatusEntry>() { new FileStatusEntry(@"C:\path\to\module.bas", FileStatus.Modified) };

Assert.IsTrue(_viewMock.Object.ExcludedChanges.Any(), "No changes found prior to refresh. Issue with Test code.");

//act
presenter.Refresh();

//
Assert.IsFalse(_viewMock.Object.ExcludedChanges.Any());
}
}
}

0 comments on commit 707d5e8

Please sign in to comment.