<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -72,5 +72,6 @@
 - (BOOL) validateUserInterfaceItem:(id)anItem;
 
 - (void)setProjectsTableView:(NSTableView *)tv;
+- (void)setDocument:(TTDocument *)aDocument;
 
 @end</diff>
      <filename>MainController.h</filename>
    </modified>
    <modified>
      <diff>@@ -689,6 +689,15 @@
 	tvProjects = [tv retain];
 }
 
+- (void)setDocument:(TTDocument *)aDocument
+{
+	[document release];
+	document = [aDocument retain];
+	[tvProjects reloadData];
+	[tvTasks reloadData];
+	[tvWorkPeriods reloadData];
+}
+
 
 
 
@@ -724,6 +733,15 @@
 - (BOOL)tableView:(NSTableView *)aTableView acceptDrop:(id &lt; NSDraggingInfo &gt;)info 
 	row:(int)row dropOperation:(NSTableViewDropOperation)operation
 {
+	if (aTableView == tvProjects &amp;&amp; [info draggingSource] == tvProjects)
+	{
+		NSData *rowsData = [[info draggingPasteboard] dataForType:@&quot;TIME_TRACKER_PROJECT_ROWS&quot;];
+		NSIndexSet *indexSet = [NSKeyedUnarchiver unarchiveObjectWithData:rowsData];
+		
+		int sourceRow = [indexSet firstIndex];
+		[document moveProject:[document objectInProjectsAtIndex:sourceRow] toIndex:row];
+		return YES;
+	}
 	return NO;
 }
 </diff>
      <filename>MainController.m</filename>
    </modified>
    <modified>
      <diff>@@ -17,6 +17,8 @@
 - (void) setProjects:(NSArray *)projs;
 - (void) addProject:(TProject *)proj;
 - (void) removeProject:(TProject *)proj;
+- (id)objectInProjectsAtIndex:(int)index;
+- (void)moveProject:(TProject *)proj toIndex:(int)index;
 
 - (NSData *)dataOfType:(NSString *)aType error:(NSError **)outError;
 </diff>
      <filename>TTDocument.h</filename>
    </modified>
    <modified>
      <diff>@@ -37,6 +37,17 @@
 	[_projects removeObject:proj];
 }
 
+- (id)objectInProjectsAtIndex:(int)index
+{
+	return [_projects objectAtIndex:index];
+}
+
+- (void)moveProject:(TProject *)proj toIndex:(int)index
+{
+//	[_projects insertObject:proj atIndex:index];
+//	[_projects removeObject:proj];
+}
+
 - (NSData *)dataOfType:(NSString *)aType error:(NSError **)outError
 {
 	NSMutableData* data = [[[NSMutableData alloc] init] autorelease];</diff>
      <filename>TTDocument.m</filename>
    </modified>
    <modified>
      <diff>@@ -34,8 +34,8 @@ describe OSX::MainController do
     rowData = pasteboard.dataForType(&quot;TIME_TRACKER_PROJECT_ROWS&quot;)
     rowDataUnarchived = OSX::NSKeyedUnarchiver.unarchiveObjectWithData(rowData)
     rowDataUnarchived.isKindOfClass(OSX::NSIndexSet).should be_true
-    rowDataUnarchived.count.should == 1
-    rowDataUnarchived.firstIndex.should == 1
+    rowDataUnarchived.count.should equal(1)
+    rowDataUnarchived.firstIndex.should equal(1)
     
   end
   
@@ -52,7 +52,7 @@ describe OSX::MainController do
     
     mc.tableView_validateDrop_proposedRow_proposedDropOperation(
         mockTableViewProjects, mockDraggingInfo, dropRow, dropOperation
-        ).should equal OSX::NSDragOperationNone
+        ).should equal(OSX::NSDragOperationNone)
     
   end
   
@@ -70,24 +70,47 @@ describe OSX::MainController do
     
     mc.tableView_validateDrop_proposedRow_proposedDropOperation(
         mockTableViewProjects, mockDraggingInfo, dropRow, dropOperation
-        ).should equal OSX::NSDragOperationMove
+        ).should equal(OSX::NSDragOperationMove)
     
   end
   
+  class MockDocument &lt; OSX::NSObject
+    objc_method :objectInProjectsAtIndex, &quot;@@:i&quot;
+    objc_method :moveProject_toIndex, &quot;v@:@i&quot;
+  end
+  
+  
   it &quot;should accept drops when moving rows within the table&quot; do
-    mc = OSX::MainController.alloc.init
     mockTableViewProjects = mock(&quot;NSTableView Projects&quot;)
+    mockTableViewProjects.stub!(:reloadData)
+    mockDocument = MockDocument.new
+    mockProject = mock(&quot;Project 1&quot;)
+    mockDocument.stub!(:objectInProjectsAtIndex).with(1).and_return(mockProject)
+    mc = OSX::MainController.alloc.init
     mc.setProjectsTableView(mockTableViewProjects)
+    mc.setDocument(mockDocument)
     mockDraggingInfo = mock(&quot;NSDraggingInfo&quot;)
+    mockDraggingInfo.stub!(:draggingSource).and_return(mockTableViewProjects)
     dropRow = 0
     dropOperation = OSX::NSTableViewDropAbove
     
+    dragRows = OSX::NSMutableIndexSet.alloc.init
+    dragRows.addIndex(1)
+    pasteboard = OSX::NSPasteboard.pasteboardWithName(&quot;rspec pasteboard&quot;)
+    
+    mc.tableView_writeRowsWithIndexes_toPasteboard(
+        mockTableViewProjects, dragRows, pasteboard
+        )
+        
+    mockDraggingInfo.stub!(:draggingPasteboard).and_return(pasteboard)
+    
+
+    mockDocument.should_receive(:moveProject_toIndex).with(mockProject, dropRow)
+    
     mc.tableView_acceptDrop_row_dropOperation(
         mockTableViewProjects, mockDraggingInfo, dropRow, dropOperation
         ).should be_true
     
-    # check that the row has been moved
-    
   end
   
 end</diff>
      <filename>spec/tt_data_source_reorder_projects_spec.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>da1ca7aa348f4f001e81d6cbdef9db0255a56403</id>
    </parent>
  </parents>
  <author>
    <name>Aaron VonderHaar</name>
    <email>gruen0aermel@gmail.com</email>
  </author>
  <url>http://github.com/avh4/time-tracker-for-mac/commit/dcffed3d39342fedfa017443f6cf66f690740b30</url>
  <id>dcffed3d39342fedfa017443f6cf66f690740b30</id>
  <committed-date>2008-08-10T23:33:37-07:00</committed-date>
  <authored-date>2008-08-10T23:33:37-07:00</authored-date>
  <message>Test passes MainController it &quot;should accept drops when moving rows within the table&quot;.  Stubbed new methods in TTDocument.</message>
  <tree>b457511187c07254acbb50a3a48aa7be58b345d6</tree>
  <committer>
    <name>Aaron VonderHaar</name>
    <email>gruen0aermel@gmail.com</email>
  </committer>
</commit>
