Permalink
Browse files

Initial commit (OpenEmu commit 5a8185eaa272ffb1271aa41506ae8d27464165d5)

  • Loading branch information...
Indragie Karunaratne
Indragie Karunaratne committed Aug 13, 2012
0 parents commit 7bac42f1b7e2e8cfe361762838d24bbf524dd601
Showing with 2,570 additions and 0 deletions.
  1. +18 −0 .gitignore
  2. +34 −0 NSColor+OEAdditions.h
  3. +78 −0 NSColor+OEAdditions.m
  4. +62 −0 OEGridLayer.h
  5. +168 −0 OEGridLayer.m
  6. +34 −0 OEGridView+OEGridViewCell.h
  7. +171 −0 OEGridView.h
  8. +1,552 −0 OEGridView.m
  9. +33 −0 OEGridViewCell+OEGridView.h
  10. +54 −0 OEGridViewCell.h
  11. +179 −0 OEGridViewCell.m
  12. +37 −0 OEGridViewFieldEditor.h
  13. +111 −0 OEGridViewFieldEditor.m
  14. +39 −0 OEGridViewLayoutManager.h
@@ -0,0 +1,18 @@
+# osx noise
+.DS_Store
+profile
+
+# xcode noise
+build/*
+*.mode1
+*.mode1v3
+*.mode2v3
+*.perspective
+*.perspectivev3
+*.pbxuser
+*.xcworkspace
+xcuserdata
+
+# svn & cvs
+.svn
+CVS
@@ -0,0 +1,34 @@
+/*
+ Copyright (c) 2012, OpenEmu Team
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ * Neither the name of the OpenEmu Team nor the
+ names of its contributors may be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY OpenEmu Team ''AS IS'' AND ANY
+ EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL OpenEmu Team BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import <AppKit/AppKit.h>
+
+@interface NSColor (OEAdditions)
+
++ (NSColor *)colorWithCGColor:(CGColorRef)color;
+- (CGColorRef)CGColor;
+
+@end
@@ -0,0 +1,78 @@
+/*
+ Copyright (c) 2012, OpenEmu Team
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ * Neither the name of the OpenEmu Team nor the
+ names of its contributors may be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY OpenEmu Team ''AS IS'' AND ANY
+ EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL OpenEmu Team BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import "NSColor+OEAdditions.h"
+#import <objc/runtime.h>
+
+// Note: this file is compiled under MRR. It cannot be ARC because there is no supported way
+// to return an autoreleased CF object under ARC.
+
+#if __has_feature(objc_arc)
+#error This file cannot be compiled with ARC
+#endif
+
+@implementation NSColor (OEAdditionsDynamic)
+
+static CGColorRef _NSColor_CGColor(NSColor *self, SEL _cmd);
+static NSColor *_NSColor_colorWithCGColor_(Class self, SEL _cmd, CGColorRef color);
+
++ (void)load
+{
+ if(![self instancesRespondToSelector:@selector(CGColor)])
+ class_addMethod(self, @selector(CGColor), (IMP)_NSColor_CGColor, "^{CGColor=}@:");
+
+ if(![self respondsToSelector:@selector(colorWithCGColor:)])
+ class_addMethod(object_getClass(self), @selector(colorWithCGColor:), (IMP)_NSColor_colorWithCGColor_, "@@:^{CGColor=}");
+}
+
+static NSColor *_NSColor_colorWithCGColor_(Class self, SEL _cmd, CGColorRef color)
+{
+ const CGFloat *components = CGColorGetComponents(color);
+ NSColorSpace *colorSpace = [[NSColorSpace alloc] initWithCGColorSpace:CGColorGetColorSpace(color)];
+ NSColor *result = [NSColor colorWithColorSpace:colorSpace components:components count:CGColorGetNumberOfComponents(color)];
+ [colorSpace release];
+
+ return result;
+}
+
+static CGColorRef _NSColor_CGColor(NSColor *self, SEL _cmd)
+{
+ if([self isEqualTo:[NSColor blackColor]]) return CGColorGetConstantColor(kCGColorBlack);
+ if([self isEqualTo:[NSColor whiteColor]]) return CGColorGetConstantColor(kCGColorWhite);
+ if([self isEqualTo:[NSColor clearColor]]) return CGColorGetConstantColor(kCGColorClear);
+
+ NSColor *rgbColor = [self colorUsingColorSpaceName:NSCalibratedRGBColorSpace];
+ CGFloat components[4];
+ [rgbColor getComponents:components];
+
+ CGColorSpaceRef theColorSpace = CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB);
+ CGColorRef theColor = CGColorCreate(theColorSpace, components);
+ CGColorSpaceRelease(theColorSpace);
+
+ return (CGColorRef)[(id)theColor autorelease];
+}
+
+@end
@@ -0,0 +1,62 @@
+/*
+ Copyright (c) 2012, OpenEmu Team
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ * Neither the name of the OpenEmu Team nor the
+ names of its contributors may be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY OpenEmu Team ''AS IS'' AND ANY
+ EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL OpenEmu Team BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import <QuartzCore/QuartzCore.h>
+#import "OEGridViewLayoutManager.h"
+
+@interface OEGridLayer : CALayer <OEGridViewLayoutManagerProtocol>
+
+#pragma mark -
+#pragma mark Mouse Handling Operations
+
+- (void)mouseDownAtPointInLayer:(NSPoint)point withEvent:(NSEvent *)theEvent;
+- (void)mouseUpAtPointInLayer:(NSPoint)point withEvent:(NSEvent *)theEvent;
+- (void)mouseMovedAtPointInLayer:(NSPoint)point withEvent:(NSEvent *)theEvent;
+
+#pragma mark -
+#pragma mark Dragging Operations
+
+- (NSDragOperation)draggingEntered:(id<NSDraggingInfo>)sender;
+- (void)draggingExited:(id<NSDraggingInfo>)sender;
+- (NSDragOperation)draggingUpdated:(id<NSDraggingInfo>)sender;
+- (BOOL)performDragOperation:(id<NSDraggingInfo>)sender;
+
+#pragma mark -
+#pragma mark Layer Operations
+
+- (void)willMoveToSuperlayer:(OEGridLayer *)superlayer;
+- (void)didMoveToSuperlayer;
+
+#pragma mark -
+#pragma mark Properties
+
+@property(nonatomic, getter=isTracking) BOOL tracking;
+@property(nonatomic, getter=isInteractive) BOOL interactive;
+
+@property(nonatomic, readonly) NSWindow *window;
+@property(nonatomic, readonly) NSView *view;
+
+@end
@@ -0,0 +1,168 @@
+/*
+ Copyright (c) 2012, OpenEmu Team
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ * Neither the name of the OpenEmu Team nor the
+ names of its contributors may be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY OpenEmu Team ''AS IS'' AND ANY
+ EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL OpenEmu Team BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import "OEGridLayer.h"
+
+@implementation OEGridLayer
+
+@synthesize tracking = _tracking, interactive = _interactive;
+
+- (id)init
+{
+ if((self = [super init]))
+ {
+ [self setLayoutManager:[OEGridViewLayoutManager layoutManager]];
+ [self setNeedsDisplayOnBoundsChange:YES];
+ }
+
+ return self;
+}
+
+#pragma mark -
+#pragma mark Mouse Handling Operations
+
+- (void)mouseDownAtPointInLayer:(NSPoint)point withEvent:(NSEvent *)theEvent
+{
+}
+
+- (void)mouseUpAtPointInLayer:(NSPoint)point withEvent:(NSEvent *)theEvent
+{
+}
+
+- (void)mouseMovedAtPointInLayer:(NSPoint)point withEvent:(NSEvent *)theEvent
+{
+}
+
+#pragma mark -
+#pragma mark Dragging Operations
+
+- (NSDragOperation)draggingEntered:(id<NSDraggingInfo>)sender
+{
+ return NSDragOperationNone;
+}
+
+- (void)draggingExited:(id<NSDraggingInfo>)sender
+{
+}
+
+- (NSDragOperation)draggingUpdated:(id<NSDraggingInfo>)sender
+{
+ return NSDragOperationNone;
+}
+
+- (BOOL)performDragOperation:(id<NSDraggingInfo>)sender
+{
+ return NO;
+}
+
+#pragma mark -
+#pragma mark Layer Operations
+
+- (id<CAAction>)actionForKey:(NSString *)event
+{
+ return nil;
+}
+
+- (CALayer *)hitTest:(CGPoint)p
+{
+ if(_interactive && CGRectContainsPoint([self frame], p)) return [super hitTest:p] ? : self;
+ return nil;
+}
+
+- (void)layoutSublayers
+{
+ if([[self delegate] respondsToSelector:@selector(layoutSublayers)]) [[self delegate] layoutSublayers];
+}
+
+- (void)willMoveToSuperlayer:(OEGridLayer *)superlayer
+{
+}
+
+- (void)didMoveToSuperlayer
+{
+}
+
+- (void)addSublayer:(CALayer *)layer
+{
+ if([layer isKindOfClass:[OEGridLayer class]])
+ {
+ [(OEGridLayer *)layer willMoveToSuperlayer:self];
+ [super addSublayer:layer];
+ [(OEGridLayer *)layer didMoveToSuperlayer];
+ }
+ else
+ {
+ [super addSublayer:layer];
+ }
+}
+
+- (void)insertSublayer:(CALayer *)layer atIndex:(unsigned int)idx
+{
+ if([layer isKindOfClass:[OEGridLayer class]])
+ {
+ [(OEGridLayer *)layer willMoveToSuperlayer:self];
+ [super insertSublayer:layer atIndex:idx];
+ [(OEGridLayer *)layer didMoveToSuperlayer];
+ }
+ else
+ {
+ [super insertSublayer:layer atIndex:idx];
+ }
+}
+
+- (void)removeFromSuperlayer
+{
+ [self willMoveToSuperlayer:nil];
+
+ [super removeFromSuperlayer];
+
+ [self didMoveToSuperlayer];
+}
+
+#pragma mark -
+#pragma mark Properties
+
+- (NSWindow *)window
+{
+ return [[self view] window];
+}
+
+- (NSView *)view
+{
+ CALayer *superlayer = self;
+ while(superlayer)
+ {
+ NSView *delegate = [superlayer delegate];
+
+ if([delegate isKindOfClass:[NSView class]]) return delegate;
+
+ superlayer = [superlayer superlayer];
+ }
+
+ return nil;
+}
+
+@end
@@ -0,0 +1,34 @@
+/*
+ Copyright (c) 2012, OpenEmu Team
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ * Neither the name of the OpenEmu Team nor the
+ names of its contributors may be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY OpenEmu Team ''AS IS'' AND ANY
+ EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL OpenEmu Team BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import "OEGridView.h"
+
+@interface OEGridView (OEGridViewCell)
+
+- (void)OE_willBeginEditingCell:(OEGridViewCell *)cell;
+- (void)OE_didEndEditingCell:(OEGridViewCell *)cell;
+
+@end
Oops, something went wrong.

0 comments on commit 7bac42f

Please sign in to comment.