Author: ericwa
Date: Sun Mar 23 00:15:33 2014
New Revision: 10615

URL: http://svn.gna.org/viewcvs/etoile?rev=10615&view=rev
Log:
ProjectDemo: Outliner: Allow deleting multiple items at once

Modified:
    trunk/Etoile/Frameworks/CoreObject/Samples/ProjectDemo/OutlineController.m

Modified: 
trunk/Etoile/Frameworks/CoreObject/Samples/ProjectDemo/OutlineController.m
URL: 
http://svn.gna.org/viewcvs/etoile/trunk/Etoile/Frameworks/CoreObject/Samples/ProjectDemo/OutlineController.m?rev=10615&r1=10614&r2=10615&view=diff
==============================================================================
--- trunk/Etoile/Frameworks/CoreObject/Samples/ProjectDemo/OutlineController.m  
(original)
+++ trunk/Etoile/Frameworks/CoreObject/Samples/ProjectDemo/OutlineController.m  
Sun Mar 23 00:15:33 2014
@@ -200,18 +200,40 @@
        [self shiftLeft: sender];
 }
 
+static NSString *implode(NSArray *array, NSString *separator)
+{
+       NSMutableString *result = [NSMutableString new];
+       const NSUInteger count = [array count];
+       for (NSUInteger i = 0; i < count; i++)
+       {
+               [result appendString: [array[i] description]];
+               if (i + 1 < count)
+               {
+                       [result appendString: separator];
+               }
+       }
+       return result;
+}
+
 - (void)deleteForward:(id)sender
 {
-       OutlineItem *itemToDelete = [self selectedItem];
-       if (itemToDelete != nil && itemToDelete != [self rootObject])
-       {
-               NSInteger index = [[[itemToDelete parent] contents] 
indexOfObject: itemToDelete];
+       NSArray *selectedRows = [self selectedRows];
+       if ([selectedRows count] == 0)
+               return;
+       
+       NSString *label = implode((NSArray *)[[selectedRows mappedCollection] 
label], @", ");
+       
+       for (OutlineItem *item in selectedRows)
+       {
+               if (item == [self rootObject])
+                       continue;
+               
+               NSInteger index = [[[item parent] contents] indexOfObject: 
item];
                assert(index != NSNotFound);
-
-               [[itemToDelete parent] removeItemAtIndex: index];
-               
-               [self commitWithIdentifier: @"delete" descriptionArguments: 
@[itemToDelete.label]];
-       }
+               [[item parent] removeItemAtIndex: index];
+       }
+       
+       [self commitWithIdentifier: @"delete" descriptionArguments: @[label]];
 }
 
 - (void)delete:(id)sender


_______________________________________________
Etoile-cvs mailing list
[email protected]
https://mail.gna.org/listinfo/etoile-cvs

Reply via email to