Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /** delegate **/
- #import <Foundation/Foundation.h>
- @class GWTitleField;
- @protocol GWTitleEditingDelegate <NSObject>
- - (void) titleFieldBeginEditing:(GWTitleField *) titleField;
- - (void) titleFieldCommitEditing:(GWTitleField *) titleField;
- - (void) titleFieldDiscardEditing:(GWTitleField *) titleField;
- @end
- /** title editor field header **/
- #import <Cocoa/Cocoa.h>
- #import "GWTitleField.h"
- #import "GWTitleEditingDelegate.h"
- @interface GWTitleEditorField : NSTextField
- @property (assign) GWTitleField * titleField;
- @property (assign) NSObject <GWTitleEditingDelegate> * editDelegate;
- - (void) beginEditing;
- - (void) cancelEditing;
- @end
- /** title editor field impl **/
- #import "GWTitleEditorField.h"
- @implementation GWTitleEditorField
- - (void) beginEditing {
- [self selectText:nil];
- [self becomeFirstResponder];
- }
- - (void) cancelEditing {
- if(!self.titleField) {
- return;
- }
- [self.titleField discardEditsFromEditorField:self];
- }
- - (void) keyUp:(NSEvent *) theEvent {
- if(self.editDelegate) {
- if(theEvent.keyCode == 36 || theEvent.keyCode == 48) { //enter || tab
- if([self.editDelegate respondsToSelector:@selector(titleFieldCommitEditing:)]) {
- [self.editDelegate titleFieldCommitEditing:self.titleField];
- }
- }
- if(theEvent.keyCode == 53) { //escape
- if([self.editDelegate respondsToSelector:@selector(titleFieldDiscardEditing:)]) {
- [self.editDelegate titleFieldDiscardEditing:self.titleField];
- }
- }
- }
- }
- @end
- /** title field header **/
- #import <Cocoa/Cocoa.h>
- #import "GWTitleEditorField.h"
- #import "GWTitleEditingDelegate.h"
- @class GWTitleEditorField;
- @interface GWTitleField : NSTextField {
- NSTimer * _editTimeout;
- }
- @property BOOL editInPlace;
- @property BOOL singleClickDelayedEdit;
- @property NSTimeInterval singleClickDelay;
- @property (assign) NSObject <GWTitleEditingDelegate> * editDelegate;
- - (void) editWithEditorField:(GWTitleEditorField *) editorField;
- - (void) commitEditsFromEditorField:(GWTitleEditorField *) editorField;
- - (void) discardEditsFromEditorField:(GWTitleEditorField *) editorField;
- @end
- /** title field impl **/
- #import "GWTitleField.h"
- @implementation GWTitleField
- - (id) initWithCoder:(NSCoder *)aDecoder {
- self = [super initWithCoder:aDecoder];
- self.singleClickDelay = .8;
- self.singleClickDelayedEdit = TRUE;
- return self;
- }
- - (id) initWithFrame:(NSRect)frameRect {
- self = [super initWithFrame:frameRect];
- self.singleClickDelay = .8;
- self.singleClickDelayedEdit = FALSE;
- return self;
- }
- - (void) mouseUp:(NSEvent *) theEvent {
- if(!self.editInPlace) {
- return;
- }
- if(_editTimeout) {
- [_editTimeout invalidate];
- _editTimeout = nil;
- }
- if(theEvent.clickCount > 1) {
- [NSTimer scheduledTimerWithTimeInterval:0 target:self selector:@selector(_edit:) userInfo:nil repeats:FALSE];
- return;
- }
- if(self.singleClickDelayedEdit) {
- _editTimeout = [NSTimer scheduledTimerWithTimeInterval:self.singleClickDelay target:self selector:@selector(_edit:) userInfo:nil repeats:false];
- }
- }
- - (void) editWithEditorField:(GWTitleEditorField *) editorField {
- if(!self.superview) {
- return;
- }
- if(editorField.titleField) {
- [editorField.titleField commitEditsFromEditorField:editorField];
- }
- editorField.titleField = self;
- [editorField setStringValue:self.stringValue];
- NSRect sf = self.frame;
- editorField.frame = sf;
- [self.superview addSubview:editorField];
- [editorField beginEditing];
- [self setHidden:TRUE];
- }
- - (void) commitEditsFromEditorField:(GWTitleEditorField *) editorField {
- editorField.titleField = nil;
- [self setStringValue:editorField.stringValue];
- [self setHidden:NO];
- [editorField removeFromSuperview];
- }
- - (void) discardEditsFromEditorField:(GWTitleEditorField *) editorField {
- editorField.titleField = nil;
- [self setHidden:NO];
- [editorField removeFromSuperview];
- }
- - (void) _edit:(NSTimer *) sender {
- if(self.editDelegate) {
- if([self.editDelegate respondsToSelector:@selector(titleFieldBeginEditing:)]) {
- [self.editDelegate titleFieldBeginEditing:self];
- }
- }
- }
- @end
Advertisement
Add Comment
Please, Sign In to add comment