Skip to content

Commit bda58bd

Browse files
committed
Added selected symbol instances highlighting (#56), background updates for breakpoints and build issues, plus clean up.
1 parent fc4bbd4 commit bda58bd

14 files changed

+350
-135
lines changed

SCXcodeMinimap.xcodeproj/project.pbxproj

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121
18C999FF1A98B04C0008AF54 /* DebuggerUI in Frameworks */ = {isa = PBXBuildFile; fileRef = 18C999FE1A98B04C0008AF54 /* DebuggerUI */; };
2222
18D6AD111A8F727B0082CB3F /* IDEFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 18D6AD101A8F727B0082CB3F /* IDEFoundation.framework */; };
2323
18E577FC1B119F6600421483 /* IDEIssueAnnotationProvider+SCXcodeMinimap.m in Sources */ = {isa = PBXBuildFile; fileRef = 18E577FB1B119F6600421483 /* IDEIssueAnnotationProvider+SCXcodeMinimap.m */; };
24+
18ECB80E1B13226500EE4D82 /* DVTLayoutManager+SCXcodeMinimap.m in Sources */ = {isa = PBXBuildFile; fileRef = 18ECB80D1B13226500EE4D82 /* DVTLayoutManager+SCXcodeMinimap.m */; };
25+
18ECB8111B1322A300EE4D82 /* SCXcodeMinimapCommon.m in Sources */ = {isa = PBXBuildFile; fileRef = 18ECB8101B1322A300EE4D82 /* SCXcodeMinimapCommon.m */; };
2426
18FE09B61707639E00118FEB /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 18FE09B51707639E00118FEB /* Cocoa.framework */; };
2527
18FE09C9170764E400118FEB /* SCXcodeMinimap.m in Sources */ = {isa = PBXBuildFile; fileRef = 18FE09C8170764E400118FEB /* SCXcodeMinimap.m */; };
2628
8742532317307161001C947C /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8742532217307161001C947C /* QuartzCore.framework */; };
@@ -86,6 +88,10 @@
8688
18E577F91B119C7200421483 /* DVTMessageBubbleAnnotation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DVTMessageBubbleAnnotation.h; sourceTree = "<group>"; };
8789
18E577FA1B119F6600421483 /* IDEIssueAnnotationProvider+SCXcodeMinimap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "IDEIssueAnnotationProvider+SCXcodeMinimap.h"; sourceTree = "<group>"; };
8890
18E577FB1B119F6600421483 /* IDEIssueAnnotationProvider+SCXcodeMinimap.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "IDEIssueAnnotationProvider+SCXcodeMinimap.m"; sourceTree = "<group>"; };
91+
18ECB80C1B13226500EE4D82 /* DVTLayoutManager+SCXcodeMinimap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "DVTLayoutManager+SCXcodeMinimap.h"; sourceTree = "<group>"; };
92+
18ECB80D1B13226500EE4D82 /* DVTLayoutManager+SCXcodeMinimap.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "DVTLayoutManager+SCXcodeMinimap.m"; sourceTree = "<group>"; };
93+
18ECB80F1B1322A300EE4D82 /* SCXcodeMinimapCommon.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SCXcodeMinimapCommon.h; sourceTree = "<group>"; };
94+
18ECB8101B1322A300EE4D82 /* SCXcodeMinimapCommon.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SCXcodeMinimapCommon.m; sourceTree = "<group>"; };
8995
18FE09B21707639E00118FEB /* SCXcodeMinimap.xcplugin */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SCXcodeMinimap.xcplugin; sourceTree = BUILT_PRODUCTS_DIR; };
9096
18FE09B51707639E00118FEB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; };
9197
18FE09B81707639E00118FEB /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; };
@@ -215,10 +221,14 @@
215221
18C2EA5B1A9C7F8A002CEB20 /* DBGBreakpointAnnotation+SCXcodeMinimap.m */,
216222
188FCC881A98B57A0026F529 /* DBGBreakpointAnnotationProvider+SCXcodeMinimap.h */,
217223
188FCC891A98B57A0026F529 /* DBGBreakpointAnnotationProvider+SCXcodeMinimap.m */,
224+
18ECB80C1B13226500EE4D82 /* DVTLayoutManager+SCXcodeMinimap.h */,
225+
18ECB80D1B13226500EE4D82 /* DVTLayoutManager+SCXcodeMinimap.m */,
218226
18E577FA1B119F6600421483 /* IDEIssueAnnotationProvider+SCXcodeMinimap.h */,
219227
18E577FB1B119F6600421483 /* IDEIssueAnnotationProvider+SCXcodeMinimap.m */,
220228
1809FF8D1AED1A730058D946 /* NSScroller+SCXcodeMinimap.h */,
221229
1809FF8E1AED1A730058D946 /* NSScroller+SCXcodeMinimap.m */,
230+
18ECB80F1B1322A300EE4D82 /* SCXcodeMinimapCommon.h */,
231+
18ECB8101B1322A300EE4D82 /* SCXcodeMinimapCommon.m */,
222232
18FE09BC1707639E00118FEB /* Supporting Files */,
223233
184C11701A740F8A002A7C65 /* Xcode Headers */,
224234
);
@@ -297,10 +307,12 @@
297307
files = (
298308
188FCC8A1A98B57A0026F529 /* DBGBreakpointAnnotationProvider+SCXcodeMinimap.m in Sources */,
299309
18FE09C9170764E400118FEB /* SCXcodeMinimap.m in Sources */,
310+
18ECB8111B1322A300EE4D82 /* SCXcodeMinimapCommon.m in Sources */,
300311
184C11861A740F97002A7C65 /* SCXcodeMinimapSelectionView.m in Sources */,
301312
184C11871A740F97002A7C65 /* SCXcodeMinimapView.m in Sources */,
302313
18C2EA5C1A9C7F8A002CEB20 /* DBGBreakpointAnnotation+SCXcodeMinimap.m in Sources */,
303314
1889464D1B11DDEE0036175B /* SCXcodeMinimapTheme.m in Sources */,
315+
18ECB80E1B13226500EE4D82 /* DVTLayoutManager+SCXcodeMinimap.m in Sources */,
304316
1819E4291AA1FB5900C344F2 /* SCXcodeMinimapScrollView.m in Sources */,
305317
18E577FC1B119F6600421483 /* IDEIssueAnnotationProvider+SCXcodeMinimap.m in Sources */,
306318
1809FF8F1AED1A730058D946 /* NSScroller+SCXcodeMinimap.m in Sources */,

SCXcodeMinimap/DBGBreakpointAnnotation+SCXcodeMinimap.m

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,23 +7,12 @@
77
//
88

99
#import "DBGBreakpointAnnotation+SCXcodeMinimap.h"
10-
#import <objc/runtime.h>
11-
10+
#import "SCXcodeMinimapCommon.h"
1211
#import "IDEFileBreakpoint.h"
1312

1413
@implementation DBGBreakpointAnnotation (SCXcodeMinimap)
1514
@dynamic minimapDelegate;
1615

17-
static void sc_swizzleInstanceMethod(Class class, SEL originalSelector, SEL swizzledSelector) {
18-
Method originalMethod = class_getInstanceMethod(class, originalSelector);
19-
Method swizzledMethod = class_getInstanceMethod(class, swizzledSelector);
20-
if (class_addMethod(class, originalSelector, method_getImplementation(swizzledMethod), method_getTypeEncoding(swizzledMethod))) {
21-
class_replaceMethod(class, swizzledSelector, method_getImplementation(originalMethod), method_getTypeEncoding(originalMethod));
22-
} else {
23-
method_exchangeImplementations(originalMethod, swizzledMethod);
24-
}
25-
}
26-
2716
+ (void)load
2817
{
2918
sc_swizzleInstanceMethod(self, @selector(_redisplay), @selector(sc_redisplay));

SCXcodeMinimap/DBGBreakpointAnnotationProvider+SCXcodeMinimap.m

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,23 +7,12 @@
77
//
88

99
#import "DBGBreakpointAnnotationProvider+SCXcodeMinimap.h"
10-
#import <objc/runtime.h>
11-
1210
#import "DBGBreakpointAnnotation+SCXcodeMinimap.h"
11+
#import "SCXcodeMinimapCommon.h"
1312

1413
@implementation DBGBreakpointAnnotationProvider (SCXcodeMinimap)
1514
@dynamic minimapDelegate;
1615

17-
static void sc_swizzleInstanceMethod(Class class, SEL originalSelector, SEL swizzledSelector) {
18-
Method originalMethod = class_getInstanceMethod(class, originalSelector);
19-
Method swizzledMethod = class_getInstanceMethod(class, swizzledSelector);
20-
if (class_addMethod(class, originalSelector, method_getImplementation(swizzledMethod), method_getTypeEncoding(swizzledMethod))) {
21-
class_replaceMethod(class, swizzledSelector, method_getImplementation(originalMethod), method_getTypeEncoding(originalMethod));
22-
} else {
23-
method_exchangeImplementations(originalMethod, swizzledMethod);
24-
}
25-
}
26-
2716
+ (void)load
2817
{
2918
sc_swizzleInstanceMethod(self, @selector(_addAnnotationForFileBreakpoint:), @selector(sc_addAnnotationForFileBreakpoint:));
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
//
2+
// DVTLayoutManager+SCXcodeMinimap.h
3+
// SCXcodeMinimap
4+
//
5+
// Created by Stefan Ceriu on 5/25/15.
6+
// Copyright (c) 2015 Stefan Ceriu. All rights reserved.
7+
//
8+
9+
#import "DVTLayoutManager.h"
10+
11+
@protocol DVTLayoutManagerMinimapDelegate;
12+
13+
@interface DVTLayoutManager (SCXcodeMinimap)
14+
15+
@property (nonatomic, weak) id<DVTLayoutManagerMinimapDelegate> minimapDelegate;
16+
17+
@end
18+
19+
@protocol DVTLayoutManagerMinimapDelegate <NSObject>
20+
21+
- (void)layoutManagerDidRequestSelectedSymbolInstancesHighlight:(DVTLayoutManager *)layoutManager;
22+
23+
@end
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
//
2+
// DVTLayoutManager+SCXcodeMinimap.m
3+
// SCXcodeMinimap
4+
//
5+
// Created by Stefan Ceriu on 5/25/15.
6+
// Copyright (c) 2015 Stefan Ceriu. All rights reserved.
7+
//
8+
9+
#import "DVTLayoutManager+SCXcodeMinimap.h"
10+
#import "SCXcodeMinimapCommon.h"
11+
12+
@implementation DVTLayoutManager (SCXcodeMinimap)
13+
@dynamic minimapDelegate;
14+
15+
+ (void)load
16+
{
17+
sc_swizzleInstanceMethod(self, @selector(_displayAutoHighlightTokens), @selector(sc_displayAutoHighlightTokens));
18+
}
19+
20+
- (void)sc_displayAutoHighlightTokens
21+
{
22+
[self sc_displayAutoHighlightTokens];
23+
24+
if([self.minimapDelegate respondsToSelector:@selector(layoutManagerDidRequestSelectedSymbolInstancesHighlight:)]) {
25+
[self.minimapDelegate layoutManagerDidRequestSelectedSymbolInstancesHighlight:self];
26+
}
27+
}
28+
29+
- (id<DVTLayoutManagerMinimapDelegate>)minimapDelegate
30+
{
31+
return objc_getAssociatedObject(self, @selector(minimapDelegate));
32+
}
33+
34+
- (void)setMinimapDelegate:(id<DVTLayoutManagerMinimapDelegate>)minimapDelegate
35+
{
36+
objc_setAssociatedObject(self, @selector(minimapDelegate), minimapDelegate, OBJC_ASSOCIATION_ASSIGN);
37+
}
38+
39+
@end

SCXcodeMinimap/IDEIssueAnnotationProvider+SCXcodeMinimap.m

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
//
88

99
#import "IDEIssueAnnotationProvider+SCXcodeMinimap.h"
10-
#import <objc/runtime.h>
10+
#import "SCXcodeMinimapCommon.h"
1111

1212
static void *IDEIssueAnnotationProviderIssuesObservingContext = &IDEIssueAnnotationProviderIssuesObservingContext;
1313

@@ -20,16 +20,6 @@ @interface IDEIssueAnnotationProvider (SCXcodeMinimap_Private)
2020
@implementation IDEIssueAnnotationProvider (SCXcodeMinimap)
2121
@dynamic minimapDelegate;
2222

23-
static void sc_swizzleInstanceMethod(Class class, SEL originalSelector, SEL swizzledSelector) {
24-
Method originalMethod = class_getInstanceMethod(class, originalSelector);
25-
Method swizzledMethod = class_getInstanceMethod(class, swizzledSelector);
26-
if (class_addMethod(class, originalSelector, method_getImplementation(swizzledMethod), method_getTypeEncoding(swizzledMethod))) {
27-
class_replaceMethod(class, swizzledSelector, method_getImplementation(originalMethod), method_getTypeEncoding(originalMethod));
28-
} else {
29-
method_exchangeImplementations(originalMethod, swizzledMethod);
30-
}
31-
}
32-
3323
+ (void)load
3424
{
3525
sc_swizzleInstanceMethod(self, @selector(providerWillUninstall), @selector(sc_providerWillUninstall));

SCXcodeMinimap/SCXcodeMinimap.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@ extern NSString *const SCXcodeMinimapShouldHighlightBreakpointsKey;
2020
extern NSString *const SCXcodeMinimapHighlightIssuesChangeNotification;
2121
extern NSString *const SCXcodeMinimapShouldHighlightIssuesKey;
2222

23+
extern NSString *const SCXcodeMinimapHighlightSelectedSymbolChangeNotification;
24+
extern NSString *const SCXcodeMinimapShouldHighlightSelectedSymbolKey;
25+
2326
extern NSString *const SCXcodeMinimapHighlightCommentsChangeNotification;
2427
extern NSString *const SCXcodeMinimapShouldHighlightCommentsKey;
2528

SCXcodeMinimap/SCXcodeMinimap.m

Lines changed: 29 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,9 @@
2929
NSString *const SCXcodeMinimapHighlightIssuesChangeNotification = @"SCXcodeMinimapHighlightIssuesChangeNotification";
3030
NSString *const SCXcodeMinimapShouldHighlightIssuesKey = @"SCXcodeMinimapShouldHighlightIssuesKey";
3131

32+
NSString *const SCXcodeMinimapHighlightSelectedSymbolChangeNotification = @"SCXcodeMinimapHighlightSelectedSymbolChangeNotification";
33+
NSString *const SCXcodeMinimapShouldHighlightSelectedSymbolKey = @"SCXcodeMinimapShouldHighlightSelectedSymbolKey";
34+
3235
NSString *const SCXcodeMinimapHighlightCommentsChangeNotification = @"SCXcodeMinimapHighlightCommentsChangeNotification";
3336
NSString *const SCXcodeMinimapShouldHighlightCommentsKey = @"SCXcodeMinimapShouldHighlightCommentsKey";
3437

@@ -52,6 +55,7 @@
5255

5356
NSString *const kHighlightBreakpointsMenuItemTitle = @"Highlight breakpoints";
5457
NSString *const kHighlightIssuesMenuItemTitle = @"Highlight issues";
58+
NSString *const kHighlightSelectedSymbolMenuItemTitle = @"Highlight selected symbol";
5559
NSString *const kHighlightCommentsMenuItemTitle = @"Highlight comments";
5660
NSString *const kHighlightPreprocessorMenuItemTitle = @"Highlight preprocessor";
5761
NSString *const kHighlightEditorMenuItemTitle = @"Highlight main editor";
@@ -88,12 +92,13 @@ - (id)init
8892

8993
- (void)registerUserDefaults
9094
{
91-
NSDictionary *userDefaults = @{SCXcodeMinimapZoomLevelKey : @(0.1f),
92-
SCXcodeMinimapShouldDisplayKey : @(YES),
93-
SCXcodeMinimapShouldHighlightBreakpointsKey : @(YES),
94-
SCXcodeMinimapShouldHighlightIssuesKey : @(YES),
95-
SCXcodeMinimapShouldHighlightCommentsKey : @(YES),
96-
SCXcodeMinimapShouldHighlightPreprocessorKey : @(YES)};
95+
NSDictionary *userDefaults = @{SCXcodeMinimapZoomLevelKey : @(0.1f),
96+
SCXcodeMinimapShouldDisplayKey : @(YES),
97+
SCXcodeMinimapShouldHighlightBreakpointsKey : @(YES),
98+
SCXcodeMinimapShouldHighlightIssuesKey : @(YES),
99+
SCXcodeMinimapShouldHighlightSelectedSymbolKey : @(YES),
100+
SCXcodeMinimapShouldHighlightCommentsKey : @(YES),
101+
SCXcodeMinimapShouldHighlightPreprocessorKey : @(YES)};
97102

98103
[[NSUserDefaults standardUserDefaults] registerDefaults:userDefaults];
99104
}
@@ -171,6 +176,15 @@ - (void)createMenuItem
171176
[highlightIssuesMenuItem setState:(issueHighlightingEnabled ? NSOnState : NSOffState)];
172177

173178

179+
NSMenuItem *highlightSelectedSymbolMenuItem = [[NSMenuItem alloc] initWithTitle:kHighlightSelectedSymbolMenuItemTitle
180+
action:@selector(toggleSelectedSymbolHighlighting:) keyEquivalent:@""];
181+
[highlightSelectedSymbolMenuItem setTarget:self];
182+
[minimapMenu addItem:highlightSelectedSymbolMenuItem];
183+
184+
BOOL selectedSymbolHighlightingEnabled = [[[NSUserDefaults standardUserDefaults] objectForKey:SCXcodeMinimapShouldHighlightSelectedSymbolKey] boolValue];
185+
[highlightSelectedSymbolMenuItem setState:(selectedSymbolHighlightingEnabled ? NSOnState : NSOffState)];
186+
187+
174188
NSMenuItem *highlightCommentsMenuItem = [[NSMenuItem alloc] initWithTitle:kHighlightCommentsMenuItemTitle
175189
action:@selector(toggleCommentsHighlighting:) keyEquivalent:@""];
176190
[highlightCommentsMenuItem setTarget:self];
@@ -287,6 +301,15 @@ - (void)toggleIssuesHighlighting:(NSMenuItem *)sender
287301
[[NSNotificationCenter defaultCenter] postNotificationName:SCXcodeMinimapHighlightIssuesChangeNotification object:nil];
288302
}
289303

304+
- (void)toggleSelectedSymbolHighlighting:(NSMenuItem *)sender
305+
{
306+
BOOL selectedSymbolHighlightingEnabled = [[[NSUserDefaults standardUserDefaults] objectForKey:SCXcodeMinimapShouldHighlightSelectedSymbolKey] boolValue];
307+
308+
[sender setState:(selectedSymbolHighlightingEnabled ? NSOffState : NSOnState)];
309+
[[NSUserDefaults standardUserDefaults] setObject:@(!selectedSymbolHighlightingEnabled) forKey:SCXcodeMinimapShouldHighlightSelectedSymbolKey];
310+
[[NSNotificationCenter defaultCenter] postNotificationName:SCXcodeMinimapHighlightSelectedSymbolChangeNotification object:nil];
311+
}
312+
290313
- (void)toggleCommentsHighlighting:(NSMenuItem *)sender
291314
{
292315
BOOL commentsHighlightingEnabled = [[[NSUserDefaults standardUserDefaults] objectForKey:SCXcodeMinimapShouldHighlightCommentsKey] boolValue];
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
//
2+
// SCXcodeMinimapCommon.h
3+
// SCXcodeMinimap
4+
//
5+
// Created by Stefan Ceriu on 5/25/15.
6+
// Copyright (c) 2015 Stefan Ceriu. All rights reserved.
7+
//
8+
9+
#import <objc/runtime.h>
10+
11+
extern void sc_swizzleInstanceMethod(Class class, SEL originalSelector, SEL swizzledSelector);
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
//
2+
// SCXcodeMinimapCommon.m
3+
// SCXcodeMinimap
4+
//
5+
// Created by Stefan Ceriu on 5/25/15.
6+
// Copyright (c) 2015 Stefan Ceriu. All rights reserved.
7+
//
8+
9+
#import "SCXcodeMinimapCommon.h"
10+
11+
void sc_swizzleInstanceMethod(Class class, SEL originalSelector, SEL swizzledSelector) {
12+
Method originalMethod = class_getInstanceMethod(class, originalSelector);
13+
Method swizzledMethod = class_getInstanceMethod(class, swizzledSelector);
14+
if (class_addMethod(class, originalSelector, method_getImplementation(swizzledMethod), method_getTypeEncoding(swizzledMethod))) {
15+
class_replaceMethod(class, swizzledSelector, method_getImplementation(originalMethod), method_getTypeEncoding(originalMethod));
16+
} else {
17+
method_exchangeImplementations(originalMethod, swizzledMethod);
18+
}
19+
}

0 commit comments

Comments
 (0)