From 9d435e0f8a13a34aca9df5996745db36ed5ef623 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Sat, 15 Jun 2013 17:41:26 +0100 Subject: [PATCH] Test: include an image in Copy and Paste test. Image copy and paste to and from the system clipboard is not available in Cappuccino today. However, the image in the collection view can be used to test internal Cappuccino copy and paste (using Edit > Copy, Edit > Paste from the Cappuccino menu). --- Tests/Manual/CopyAndPaste/AppController.j | 51 +++++-- .../Manual/CopyAndPaste/CollectionViewItem.j | 13 +- .../Resources/2952609526_9fd245dfcd_q.jpg | Bin 0 -> 17888 bytes .../CopyAndPaste/Resources/MainMenu.cib | 7 +- .../CopyAndPaste/Resources/MainMenu.xib | 135 ++++++++++++++---- 5 files changed, 161 insertions(+), 45 deletions(-) create mode 100644 Tests/Manual/CopyAndPaste/Resources/2952609526_9fd245dfcd_q.jpg diff --git a/Tests/Manual/CopyAndPaste/AppController.j b/Tests/Manual/CopyAndPaste/AppController.j index 0aab356b8..2d67f4045 100644 --- a/Tests/Manual/CopyAndPaste/AppController.j +++ b/Tests/Manual/CopyAndPaste/AppController.j @@ -26,22 +26,39 @@ - (void)awakeFromCib { - [anArrayController setContent:@[@"Cat", @"Rabbit", @"Dinosaur"]]; + // http://www.flickr.com/photos/viamoi/2952609526/ + var anImage = CPImageInBundle("2952609526_9fd245dfcd_q.jpg"); + + [anArrayController setContent:@[@"Cat", @"Rabbit", @"Dinosaur", anImage]]; [theWindow setFullPlatformWindow:YES]; } - (void)copy:(id)sender { - // For now just combine multiple selections into a single string. var selected = [anArrayController selectedObjects], - stringValue = selected.join(", "), - pasteboard = [CPPasteboard generalPasteboard]; + strings = [], + images = []; - [pasteboard declareTypes:[CPStringPboardType] owner:nil]; - [pasteboard setString:stringValue forType:CPStringPboardType]; + for (var i = 0; i < selected.length; i++) + ([selected[i] isKindOfClass:CPImage] ? images : strings).push(selected[i]); - CPLog.info("Copied %@.", stringValue); + var stringValue = strings.join(", "), + pasteboard = [CPPasteboard generalPasteboard], + types = []; + + if (stringValue) + [types addObject:CPStringPboardType] + if (images) + [types addObject:CPImagesPboardType] + + [pasteboard declareTypes:types owner:nil]; + if (stringValue) + [pasteboard setString:stringValue forType:CPStringPboardType]; + if (images) + [pasteboard setData:[CPKeyedArchiver archivedDataWithRootObject:images] forType:CPImagesPboardType]; + + CPLog.info("Copied %@.", (stringValue || "") + " " + (images || "")); } - (void)cut:(id)sender @@ -53,16 +70,24 @@ - (void)paste:(id)sender { console.log(self + "paste: " + sender); - var pasteboard = [CPPasteboard generalPasteboard]; + var pasteboard = [CPPasteboard generalPasteboard], + parts = []; - if (![[pasteboard types] containsObject:CPStringPboardType]) - return; + if ([[pasteboard types] containsObject:CPStringPboardType]) + { + var stringValue = [pasteboard stringForType:CPStringPboardType]; - var stringValue = [pasteboard stringForType:CPStringPboardType], - parts = [stringValue componentsSeparatedByString:@", "]; + [parts addObjectsFromArray:[stringValue componentsSeparatedByString:@", "]]; + } + + if ([[pasteboard types] containsObject:CPImagesPboardType]) + { + var images = [CPKeyedUnarchiver unarchiveObjectWithData:[pasteboard dataForType:CPImagesPboardType]]; + + [parts addObjectsFromArray:images]; + } [anArrayController addObjects:parts]; - CPLog.info("Pasted %@.", parts); } diff --git a/Tests/Manual/CopyAndPaste/CollectionViewItem.j b/Tests/Manual/CopyAndPaste/CollectionViewItem.j index a6807f521..74d8d2b7e 100644 --- a/Tests/Manual/CopyAndPaste/CollectionViewItem.j +++ b/Tests/Manual/CopyAndPaste/CollectionViewItem.j @@ -1,5 +1,8 @@ @import @import +@import +@import +@import @implementation CollectionViewItem : CPCollectionViewItem { @@ -10,6 +13,7 @@ @implementation CollectionViewView : CPView { @outlet CPTextField textField @accessors; + @outlet CPImageView imageView @accessors; boolean selected @accessors; } @@ -24,7 +28,11 @@ - (void)setRepresentedObject:(id)anObject { - [textField setStringValue:anObject || ""]; + var stringValue = [anObject isKindOfClass:CPString] ? anObject : "", + image = [anObject isKindOfClass:CPImage] ? anObject : nil; + + [textField setStringValue:stringValue]; + [imageView setImage:image]; } - (id)initWithCoder:(CPCoder)aCoder @@ -33,7 +41,8 @@ if (self) { - textField = [self subviews][0]; + textField = [self subviews][1]; + imageView = [self subviews][0]; } return self; diff --git a/Tests/Manual/CopyAndPaste/Resources/2952609526_9fd245dfcd_q.jpg b/Tests/Manual/CopyAndPaste/Resources/2952609526_9fd245dfcd_q.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ac80facba4d462b7dbe02e35b7cce2e1926c4497 GIT binary patch literal 17888 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 1050 - 12D78 + 12E55 3084 - 1187.37 + 1187.39 626.00 com.apple.InterfaceBuilder.CocoaPlugin @@ -16,6 +16,8 @@ NSCollectionView NSCollectionViewItem NSCustomObject + NSImageCell + NSImageView NSMenu NSMenuItem NSScrollView @@ -643,7 +645,7 @@ 7 2 - {{335, 390}, {791, 352}} + {{335, 390}, {791, 386}} 1946157056 Window NSWindow @@ -657,7 +659,7 @@ 268 - {{17, 315}, {237, 17}} + {{17, 349}, {237, 17}} @@ -770,7 +772,7 @@ 0.63157892227172852 - {{20, 180}, {751, 127}} + {{20, 214}, {751, 127}} @@ -786,7 +788,7 @@ 290 - {{17, 20}, {757, 119}} + {{17, 20}, {757, 153}} @@ -796,14 +798,20 @@ 67108864 272629760 - SW5zdHJ1Y3Rpb25zOgoKMS4gU2VsZWN0IHNvbWV0aGluZyBpbiB0aGUgQ29sbGVjdGlvbiBWaWV3IG9y -IHRoZSBUZXh0IEZpZWxkIGFuZCBjb3B5IGl0IHRvIHRoZSBzeXN0ZW0gY2xpcGJvYXJkIChDbWQtQyBv -biB0aGUgTWFjLCBDdHJsLUMgb24gdGhlIFBDKS4KMi4gT3BlbiB0aGlzIGFwcGxpY2F0aW9uIGluIGEg -ZGlmZmVyZW50IGJyb3dzZXIgd2luZG93LCBvciBldmVuIGEgZGlmZmVyZW50IGJyb3dzZXIuIFlvdSBj -YW4gdGVzdCBjb3B5aW5nIGZyb20gRmlyZWZveCB0byBDaHJvbWUsIFNhZmFyaSB0byBJbnRlcm5ldCBF -eHBsb3JlciBvciB2aWNlIHZlcnNhIGFuZCBzbyBvbi4KMy4gUGFzdGUgaW50byB0aGUgQ29sbGVjdGlv -biBWaWV3IG9yIFRleHQgRmllbGQgb2YgdGhlIGRlc3RpbmF0aW9uIGFuZCB2ZXJpZnkgeW91ciBtYXRl -cmlhbCB0cmFuc2ZlcnJlZCBjb3JyZWN0bHkuA + + SW5zdHJ1Y3Rpb25zOgoKMS4gU2VsZWN0IHRleHQgaXRlbXMgaW4gdGhlIENvbGxlY3Rpb24gVmlldyBv +ciB0aGUgVGV4dCBGaWVsZCBhbmQgY29weSBpdCB0byB0aGUgc3lzdGVtIGNsaXBib2FyZCAoQ21kLUMg +b24gdGhlIE1hYywgQ3RybC1DIG9uIHRoZSBQQykuCjIuIE9wZW4gdGhpcyBhcHBsaWNhdGlvbiBpbiBh +IGRpZmZlcmVudCBicm93c2VyIHdpbmRvdywgb3IgZXZlbiBhIGRpZmZlcmVudCBicm93c2VyLiBZb3Ug +Y2FuIHRlc3QgY29weWluZyBmcm9tIEZpcmVmb3ggdG8gQ2hyb21lLCBTYWZhcmkgdG8gSW50ZXJuZXQg +RXhwbG9yZXIgb3IgdmljZSB2ZXJzYSBhbmQgc28gb24uCjMuIFBhc3RlIGludG8gdGhlIENvbGxlY3Rp +b24gVmlldyBvciBUZXh0IEZpZWxkIG9mIHRoZSBkZXN0aW5hdGlvbiBhbmQgdmVyaWZ5IHlvdXIgbWF0 +ZXJpYWwgdHJhbnNmZXJyZWQgY29ycmVjdGx5Lgo0LiBJdCBpcyBub3QgY3VycmVudGx5IHBvc3NpYmxl +IHRvIGNvcHkgb3IgcGFzdGUgaW1hZ2VzIGJldHdlZW4gYnJvd3NlcnMuIFVzaW5nIHRoZSBDYXBwdWNj +aW5vIG1lbnVzIG9ubHksIHlvdSBjYW4gY29weSwgY3V0IG9yIHBhc3RlIHRoZSBpbWFnZSBpdGVtIHdp +dGhpbiB0aGlzIGFwcCBpbiB0aGlzIGJyb3dzZXIgd2luZG93IChlLmcuIHRvIGFuZCBmcm9tIHRoZSBz +YW1lIGNvbGxlY3Rpb24gdmlldykuA + LucidaGrande 13 @@ -820,7 +828,7 @@ cmlhbCB0cmFuc2ZlcnJlZCBjb3JyZWN0bHkuA 290 - {{162, 152}, {609, 22}} + {{162, 186}, {609, 22}} @@ -855,7 +863,7 @@ cmlhbCB0cmFuc2ZlcnJlZCBjb3JyZWN0bHkuA 292 - {{22, 155}, {135, 17}} + {{22, 189}, {135, 17}} @@ -874,7 +882,7 @@ cmlhbCB0cmFuc2ZlcnJlZCBjb3JyZWN0bHkuA NO - {791, 352} + {791, 386} @@ -901,6 +909,39 @@ cmlhbCB0cmFuc2ZlcnJlZCBjb3JyZWN0bHkuA 256 YES + + + 274 + + YES + + YES + Apple PDF pasteboard type + Apple PICT pasteboard type + Apple PNG pasteboard type + NSFilenamesPboardType + NeXT Encapsulated PostScript v1.2 pasteboard type + NeXT TIFF v4.0 pasteboard type + + + {{17, 17}, {66, 66}} + + + + _NS:9 + YES + + 134217728 + 33554432 + _NS:9 + 0 + 0 + 0 + NO + + NO + YES + 298 @@ -911,8 +952,8 @@ cmlhbCB0cmFuc2ZlcnJlZCBjb3JyZWN0bHkuA _NS:1535 YES - 68157504 - 272630784 + 67108928 + 272631808 Label _NS:1535 @@ -926,7 +967,7 @@ cmlhbCB0cmFuc2ZlcnJlZCBjb3JyZWN0bHkuA {100, 100} - + @@ -1866,6 +1907,7 @@ cmlhbCB0cmFuc2ZlcnJlZCBjb3JyZWN0bHkuA YES + @@ -1930,6 +1972,20 @@ cmlhbCB0cmFuc2ZlcnJlZCBjb3JyZWN0bHkuA + + 493 + + + YES + + + + + + 494 + + + @@ -2017,6 +2073,8 @@ cmlhbCB0cmFuc2ZlcnJlZCBjb3JyZWN0bHkuA 490.IBPluginDependency 491.IBPluginDependency 492.IBPluginDependency + 493.IBPluginDependency + 494.IBPluginDependency 5.IBPluginDependency 56.IBPluginDependency 57.IBPluginDependency @@ -2152,6 +2210,8 @@ cmlhbCB0cmFuc2ZlcnJlZCBjb3JyZWN0bHkuA com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin @@ -2166,7 +2226,7 @@ cmlhbCB0cmFuc2ZlcnJlZCBjb3JyZWN0bHkuA - 492 + 496 @@ -2230,14 +2290,35 @@ cmlhbCB0cmFuc2ZlcnJlZCBjb3JyZWN0bHkuA CollectionViewView NSView - textField - NSTextField + YES + + YES + imageView + textField + + + YES + NSImageView + NSTextField + - textField - - textField - NSTextField + YES + + YES + imageView + textField + + + YES + + imageView + NSImageView + + + textField + NSTextField +