diff --git a/ChangeLog b/ChangeLog index 3db346f..6fcae6b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2014-08-29 Riccardo Mottola + + * Modules/Editors/ProjectCenter/GNUmakefile + * Modules/Editors/ProjectCenter/LineJumper.h + * Modules/Editors/ProjectCenter/LineJumper.m + * Modules/Editors/ProjectCenter/PCEditorView.m + * Modules/Editors/ProjectCenter/Resources/LineJumper.gorm + Implement and add a simple go-to-line panel + 2014-08-25 Wolfgang Lux * Modules/Editors/ProjectCenter/PCEditor.m (unhighlightCharacter:): diff --git a/Modules/Editors/ProjectCenter/GNUmakefile b/Modules/Editors/ProjectCenter/GNUmakefile index 041209f..e9757de 100644 --- a/Modules/Editors/ProjectCenter/GNUmakefile +++ b/Modules/Editors/ProjectCenter/GNUmakefile @@ -29,7 +29,8 @@ ProjectCenter_RESOURCE_FILES= \ Resources/FileH.tiff \ Resources/FileHH.tiff \ Resources/FileM.tiff \ - Resources/FileMH.tiff + Resources/FileMH.tiff \ + Resources/LineJumper.gorm # # Header files @@ -38,7 +39,8 @@ ProjectCenter_HEADERS= \ PCEditor.h \ PCEditorView.h \ SyntaxDefinition.h \ - SyntaxHighlighter.h + SyntaxHighlighter.h \ + LineJumper.h # # Class files @@ -48,7 +50,8 @@ ProjectCenter_OBJC_FILES= \ PCEditorView.m \ TextPattern.m \ SyntaxDefinition.m \ - SyntaxHighlighter.m + SyntaxHighlighter.m \ + LineJumper.m include ../../GNUmakefile.bundles include $(GNUSTEP_MAKEFILES)/bundle.make diff --git a/Modules/Editors/ProjectCenter/LineJumper.h b/Modules/Editors/ProjectCenter/LineJumper.h new file mode 100644 index 0000000..4aae9df --- /dev/null +++ b/Modules/Editors/ProjectCenter/LineJumper.h @@ -0,0 +1,20 @@ +#import +#import + +@interface LineJumper : NSObject +{ + IBOutlet NSTextField *lineField; + IBOutlet NSButton *goToButton; +} + ++ (id)sharedInstance; + +- (NSPanel *)linePanel; + +/* Gets the first responder and returns it if it's an NSTextView */ +- (NSTextView *)editorViewToUse; + +/* panel UI methods */ +- (IBAction)goToLine:(id)sender; + +@end diff --git a/Modules/Editors/ProjectCenter/LineJumper.m b/Modules/Editors/ProjectCenter/LineJumper.m new file mode 100644 index 0000000..36ba05f --- /dev/null +++ b/Modules/Editors/ProjectCenter/LineJumper.m @@ -0,0 +1,72 @@ +#import "LineJumper.h" + +static id sharedLineJumper = nil; + +@implementation LineJumper + ++ (id)sharedInstance +{ + if (!sharedLineJumper) + { + sharedLineJumper = [[self allocWithZone:[[NSApplication sharedApplication] zone]] init]; + } + return sharedLineJumper; +} + +- (id) init +{ + if (!(self = [super init])) return nil; + // [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(appDidActivate:) name:NSApplicationDidBecomeActiveNotification object:[NSApplication sharedApplication]]; + // [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(addWillDeactivate:) name:NSApplicationWillResignActiveNotification object:[NSApplication sharedApplication]]; + return self; +} + +- (void)loadUI +{ + if (!lineField) + { + if (![NSBundle loadNibNamed:@"LineJumper" owner:self]) + { + NSLog(@"Failed to load LineJumper.nib"); + NSBeep(); + } + if (self == sharedLineJumper) + [[lineField window] setFrameAutosaveName:@"GoTo Line"]; + } +} + +- (NSTextView *)editorViewToUse +{ + id tv = [[NSApp mainWindow] firstResponder]; + if([tv conformsToProtocol:@protocol(CodeEditorView)]) + return tv; + return nil; +} + +- (NSPanel *)linePanel { + if (!lineField) + [self loadUI]; + return (NSPanel *)[lineField window]; +} + +- (void)orderFrontLinePanel:(id)sender +{ + NSPanel *panel = [self linePanel]; + [lineField selectText:nil]; + [panel makeKeyAndOrderFront:nil]; +} + +- (IBAction)goToLine:(id)sender +{ + NSUInteger line; + NSTextView *cev; + + line = (NSUInteger)[lineField integerValue]; + cev = [self editorViewToUse]; + if (cev) + { + [cev goToLineNumber:line]; + } +} + +@end diff --git a/Modules/Editors/ProjectCenter/PCEditorView.m b/Modules/Editors/ProjectCenter/PCEditorView.m index c2b2315..c9de86c 100644 --- a/Modules/Editors/ProjectCenter/PCEditorView.m +++ b/Modules/Editors/ProjectCenter/PCEditorView.m @@ -42,6 +42,7 @@ #import "PCEditor.h" #import "SyntaxHighlighter.h" +#import "LineJumper.h" static inline float my_abs(float aValue) { @@ -623,7 +624,10 @@ static int ComputeIndentingOffset(NSString * string, unsigned int start) - (void)performGoToLinePanelAction:(id)sender { - NSLog(@"perform go to line!"); + LineJumper *lj; + + lj = [LineJumper sharedInstance]; + [lj orderFrontLinePanel:self]; } - (void)goToLineNumber:(NSUInteger)lineNumber diff --git a/Modules/Editors/ProjectCenter/Resources/LineJumper.gorm/data.classes b/Modules/Editors/ProjectCenter/Resources/LineJumper.gorm/data.classes new file mode 100644 index 0000000..85b42b3 --- /dev/null +++ b/Modules/Editors/ProjectCenter/Resources/LineJumper.gorm/data.classes @@ -0,0 +1,19 @@ +{ + "## Comment" = "Do NOT change this file, Gorm maintains it"; + FirstResponder = { + Actions = ( + "goToLine:" + ); + Super = NSObject; + }; + LineJumper = { + Actions = ( + "goToLine:" + ); + Outlets = ( + lineField, + goToButton + ); + Super = NSObject; + }; +} \ No newline at end of file diff --git a/Modules/Editors/ProjectCenter/Resources/LineJumper.gorm/data.info b/Modules/Editors/ProjectCenter/Resources/LineJumper.gorm/data.info new file mode 100644 index 0000000..6361435 Binary files /dev/null and b/Modules/Editors/ProjectCenter/Resources/LineJumper.gorm/data.info differ diff --git a/Modules/Editors/ProjectCenter/Resources/LineJumper.gorm/objects.gorm b/Modules/Editors/ProjectCenter/Resources/LineJumper.gorm/objects.gorm new file mode 100644 index 0000000..383d6f3 Binary files /dev/null and b/Modules/Editors/ProjectCenter/Resources/LineJumper.gorm/objects.gorm differ