Skip to content

Commit dc316f5

Browse files
committed
Implemented #65 - autohiding for version and comparison editors
1 parent 710728b commit dc316f5

12 files changed

+1694
-16
lines changed

SCXcodeMinimap.xcodeproj/project.pbxproj

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
18C2EA5C1A9C7F8A002CEB20 /* DBGBreakpointAnnotation+SCXcodeMinimap.m in Sources */ = {isa = PBXBuildFile; fileRef = 18C2EA5B1A9C7F8A002CEB20 /* DBGBreakpointAnnotation+SCXcodeMinimap.m */; };
1717
18DE25ED1B202ACA00F3D380 /* IDESourceCodeEditor+SCXcodeMinimap.m in Sources */ = {isa = PBXBuildFile; fileRef = 18DE25EC1B202ACA00F3D380 /* IDESourceCodeEditor+SCXcodeMinimap.m */; };
1818
18E577FC1B119F6600421483 /* IDEIssueAnnotationProvider+SCXcodeMinimap.m in Sources */ = {isa = PBXBuildFile; fileRef = 18E577FB1B119F6600421483 /* IDEIssueAnnotationProvider+SCXcodeMinimap.m */; };
19+
18E75A261B80B3190082AA24 /* IDEEditorArea+SCXcodeMinimap.m in Sources */ = {isa = PBXBuildFile; fileRef = 18E75A251B80B3190082AA24 /* IDEEditorArea+SCXcodeMinimap.m */; };
1920
18ECB80E1B13226500EE4D82 /* DVTLayoutManager+SCXcodeMinimap.m in Sources */ = {isa = PBXBuildFile; fileRef = 18ECB80D1B13226500EE4D82 /* DVTLayoutManager+SCXcodeMinimap.m */; };
2021
18ECB8111B1322A300EE4D82 /* SCXcodeMinimapCommon.m in Sources */ = {isa = PBXBuildFile; fileRef = 18ECB8101B1322A300EE4D82 /* SCXcodeMinimapCommon.m */; };
2122
18FE09B61707639E00118FEB /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 18FE09B51707639E00118FEB /* Cocoa.framework */; };
@@ -71,14 +72,22 @@
7172
188D38781A98B3D8005C7F85 /* DVTAnnotation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DVTAnnotation.h; sourceTree = "<group>"; };
7273
188FCC881A98B57A0026F529 /* DBGBreakpointAnnotationProvider+SCXcodeMinimap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "DBGBreakpointAnnotationProvider+SCXcodeMinimap.h"; sourceTree = "<group>"; };
7374
188FCC891A98B57A0026F529 /* DBGBreakpointAnnotationProvider+SCXcodeMinimap.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "DBGBreakpointAnnotationProvider+SCXcodeMinimap.m"; sourceTree = "<group>"; };
75+
18AFA6CE1B807E5F005D23E1 /* IDEWorkspaceWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDEWorkspaceWindowController.h; sourceTree = "<group>"; };
76+
18AFA6CF1B8083BB005D23E1 /* IDEWorkspaceTabController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDEWorkspaceTabController.h; sourceTree = "<group>"; };
77+
18AFA6D01B80852A005D23E1 /* IDEEditorArea.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDEEditorArea.h; sourceTree = "<group>"; };
7478
18B3CEE51A8AA52A00A0873D /* DVTPreferenceSetManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DVTPreferenceSetManager.h; sourceTree = "<group>"; };
79+
18B53B481B88C1A200120739 /* DVTFilePath.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DVTFilePath.h; sourceTree = "<group>"; };
7580
18C2EA5A1A9C7F8A002CEB20 /* DBGBreakpointAnnotation+SCXcodeMinimap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "DBGBreakpointAnnotation+SCXcodeMinimap.h"; sourceTree = "<group>"; };
7681
18C2EA5B1A9C7F8A002CEB20 /* DBGBreakpointAnnotation+SCXcodeMinimap.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "DBGBreakpointAnnotation+SCXcodeMinimap.m"; sourceTree = "<group>"; };
7782
18C8F0331A7ECB1300C7A76F /* DVTFoldingLayoutManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DVTFoldingLayoutManager.h; sourceTree = "<group>"; };
7883
18C8F0341A7ECB1300C7A76F /* DVTLayoutManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DVTLayoutManager.h; sourceTree = "<group>"; };
7984
18C999FC1A98AF370008AF54 /* DBGBreakpointAnnotationProvider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DBGBreakpointAnnotationProvider.h; sourceTree = "<group>"; };
8085
18C999FD1A98AF580008AF54 /* DVTAnnotationProvider.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DVTAnnotationProvider.h; sourceTree = "<group>"; };
8186
18CA02B61A9D0DF1001C5CE1 /* IDEBreakpoint.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = IDEBreakpoint.h; sourceTree = "<group>"; };
87+
18D87F9C1B8899E800D27B29 /* IDESourceCodeComparisonEditor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDESourceCodeComparisonEditor.h; sourceTree = "<group>"; };
88+
18D87F9D1B889A3000D27B29 /* IDEComparisonEditor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDEComparisonEditor.h; sourceTree = "<group>"; };
89+
18D87F9E1B88A57900D27B29 /* IDEEditorModeViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDEEditorModeViewController.h; sourceTree = "<group>"; };
90+
18DCC5BA1B80B11700596B6F /* IDEEditorContext.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDEEditorContext.h; sourceTree = "<group>"; };
8291
18DE25EB1B202ACA00F3D380 /* IDESourceCodeEditor+SCXcodeMinimap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "IDESourceCodeEditor+SCXcodeMinimap.h"; sourceTree = "<group>"; };
8392
18DE25EC1B202ACA00F3D380 /* IDESourceCodeEditor+SCXcodeMinimap.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "IDESourceCodeEditor+SCXcodeMinimap.m"; sourceTree = "<group>"; };
8493
18DE6AFB1B203D070042615D /* DVTFindResult.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DVTFindResult.h; sourceTree = "<group>"; };
@@ -88,6 +97,8 @@
8897
18E577F91B119C7200421483 /* DVTMessageBubbleAnnotation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DVTMessageBubbleAnnotation.h; sourceTree = "<group>"; };
8998
18E577FA1B119F6600421483 /* IDEIssueAnnotationProvider+SCXcodeMinimap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "IDEIssueAnnotationProvider+SCXcodeMinimap.h"; sourceTree = "<group>"; };
9099
18E577FB1B119F6600421483 /* IDEIssueAnnotationProvider+SCXcodeMinimap.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "IDEIssueAnnotationProvider+SCXcodeMinimap.m"; sourceTree = "<group>"; };
100+
18E75A241B80B3190082AA24 /* IDEEditorArea+SCXcodeMinimap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "IDEEditorArea+SCXcodeMinimap.h"; sourceTree = "<group>"; };
101+
18E75A251B80B3190082AA24 /* IDEEditorArea+SCXcodeMinimap.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "IDEEditorArea+SCXcodeMinimap.m"; sourceTree = "<group>"; };
91102
18ECB80C1B13226500EE4D82 /* DVTLayoutManager+SCXcodeMinimap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "DVTLayoutManager+SCXcodeMinimap.h"; sourceTree = "<group>"; };
92103
18ECB80D1B13226500EE4D82 /* DVTLayoutManager+SCXcodeMinimap.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "DVTLayoutManager+SCXcodeMinimap.m"; sourceTree = "<group>"; };
93104
18ECB80F1B1322A300EE4D82 /* SCXcodeMinimapCommon.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SCXcodeMinimapCommon.h; sourceTree = "<group>"; };
@@ -133,6 +144,8 @@
133144
184C11701A740F8A002A7C65 /* Xcode Headers */ = {
134145
isa = PBXGroup;
135146
children = (
147+
18B53B481B88C1A200120739 /* DVTFilePath.h */,
148+
18D87F9E1B88A57900D27B29 /* IDEEditorModeViewController.h */,
136149
188D38761A98B26E005C7F85 /* DBGBreakpointAnnotation.h */,
137150
18C999FC1A98AF370008AF54 /* DBGBreakpointAnnotationProvider.h */,
138151
188D38781A98B3D8005C7F85 /* DVTAnnotation.h */,
@@ -165,15 +178,21 @@
165178
18E577F61B119BF200421483 /* IDEBuildIssueAnnotation.h */,
166179
18E577F81B119C3F00421483 /* IDEBuildIssueErrorAnnotation.h */,
167180
18E577F71B119C1000421483 /* IDEBuildIssueWarningAnnotation.h */,
181+
18D87F9D1B889A3000D27B29 /* IDEComparisonEditor.h */,
168182
184C117D1A740F8A002A7C65 /* IDEEditor.h */,
183+
18AFA6D01B80852A005D23E1 /* IDEEditorArea.h */,
184+
18DCC5BA1B80B11700596B6F /* IDEEditorContext.h */,
169185
1876135D1A77A69F00974BE1 /* IDEEditorDocument.h */,
170186
187EEF6A1A8F78C400E4EF39 /* IDEFileBreakpoint.h */,
171187
18FEFA8C1A782D8600DC98C5 /* IDEFileTextSettings.h */,
172188
180F24D61B119866009ACE49 /* IDEIssueAnnotationProvider.h */,
189+
18D87F9C1B8899E800D27B29 /* IDESourceCodeComparisonEditor.h */,
173190
1812C3911A77A7CF00E2CFB3 /* IDESourceCodeDocument.h */,
174191
184C117E1A740F8A002A7C65 /* IDESourceCodeEditor.h */,
175192
184C117F1A740F8A002A7C65 /* IDESourceCodeEditorContainerView.h */,
176193
184C11801A740F8A002A7C65 /* IDEViewController.h */,
194+
18AFA6CF1B8083BB005D23E1 /* IDEWorkspaceTabController.h */,
195+
18AFA6CE1B807E5F005D23E1 /* IDEWorkspaceWindowController.h */,
177196
);
178197
path = "Xcode Headers";
179198
sourceTree = "<group>";
@@ -240,6 +259,8 @@
240259
18DE25EC1B202ACA00F3D380 /* IDESourceCodeEditor+SCXcodeMinimap.m */,
241260
1809FF8D1AED1A730058D946 /* NSScroller+SCXcodeMinimap.h */,
242261
1809FF8E1AED1A730058D946 /* NSScroller+SCXcodeMinimap.m */,
262+
18E75A241B80B3190082AA24 /* IDEEditorArea+SCXcodeMinimap.h */,
263+
18E75A251B80B3190082AA24 /* IDEEditorArea+SCXcodeMinimap.m */,
243264
18FE09BC1707639E00118FEB /* Supporting Files */,
244265
184C11701A740F8A002A7C65 /* Xcode Headers */,
245266
);
@@ -327,6 +348,7 @@
327348
18ECB80E1B13226500EE4D82 /* DVTLayoutManager+SCXcodeMinimap.m in Sources */,
328349
1819E4291AA1FB5900C344F2 /* SCXcodeMinimapScrollView.m in Sources */,
329350
18E577FC1B119F6600421483 /* IDEIssueAnnotationProvider+SCXcodeMinimap.m in Sources */,
351+
18E75A261B80B3190082AA24 /* IDEEditorArea+SCXcodeMinimap.m in Sources */,
330352
1809FF8F1AED1A730058D946 /* NSScroller+SCXcodeMinimap.m in Sources */,
331353
);
332354
runOnlyForDeploymentPostprocessing = 0;
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
//
2+
// IDEEditorArea+SCXcodeMinimap.h
3+
// SCXcodeMinimap
4+
//
5+
// Created by Stefan Ceriu on 8/16/15.
6+
// Copyright (c) 2015 Stefan Ceriu. All rights reserved.
7+
//
8+
9+
#import "IDEEditorArea.h"
10+
11+
@protocol IDEEditorAreaMinimapDelegate;
12+
13+
@interface IDEEditorArea (SCXcodeMinimap)
14+
15+
@property (nonatomic, weak) id<IDEEditorAreaMinimapDelegate> minimapDelegate;
16+
17+
@end
18+
19+
@protocol IDEEditorAreaMinimapDelegate <NSObject>
20+
21+
- (void)editorAreaDidChangeEditorMode:(IDEEditorArea *)editorArea;
22+
23+
@end
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
//
2+
// IDEEditorArea+SCXcodeMinimap.m
3+
// SCXcodeMinimap
4+
//
5+
// Created by Stefan Ceriu on 8/16/15.
6+
// Copyright (c) 2015 Stefan Ceriu. All rights reserved.
7+
//
8+
9+
#import "IDEEditorArea+SCXcodeMinimap.h"
10+
#import "SCXcodeMinimapCommon.h"
11+
12+
static void *IDEEditorAreaEditorModeObservingContext = &IDEEditorAreaEditorModeObservingContext;
13+
14+
@implementation IDEEditorArea (SCXcodeMinimap)
15+
16+
+ (void)load
17+
{
18+
sc_swizzleInstanceMethod([self class], @selector(viewDidInstall), @selector(sc_viewDidInstall));
19+
sc_swizzleInstanceMethod([self class], @selector(viewWillUninstall), @selector(sc_viewWillUninstall));
20+
}
21+
22+
- (id<IDEEditorAreaMinimapDelegate>)minimapDelegate
23+
{
24+
return objc_getAssociatedObject(self, @selector(minimapDelegate));
25+
}
26+
27+
- (void)setMinimapDelegate:(id<IDEEditorAreaMinimapDelegate>)minimapDelegate
28+
{
29+
objc_setAssociatedObject(self, @selector(minimapDelegate), minimapDelegate, OBJC_ASSOCIATION_ASSIGN);
30+
}
31+
32+
- (void)sc_viewDidInstall
33+
{
34+
[self addObserver:self forKeyPath:@"editorMode" options:NSKeyValueObservingOptionInitial | NSKeyValueObservingOptionNew context:IDEEditorAreaEditorModeObservingContext];
35+
36+
[self sc_viewDidInstall];
37+
}
38+
39+
- (void)sc_viewWillUninstall
40+
{
41+
[self removeObserver:self forKeyPath:@"editorMode"];
42+
43+
[self sc_viewWillUninstall];
44+
}
45+
46+
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
47+
{
48+
if(context == IDEEditorAreaEditorModeObservingContext) {
49+
if([self.minimapDelegate respondsToSelector:@selector(editorAreaDidChangeEditorMode:)]) {
50+
[self.minimapDelegate editorAreaDidChangeEditorMode:self];
51+
}
52+
}
53+
}
54+
55+
@end

SCXcodeMinimap/SCXcodeMinimapView.m

Lines changed: 97 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,9 @@
1212
#import "SCXcodeMinimapSelectionView.h"
1313

1414
#import "IDESourceCodeEditor+SCXcodeMinimap.h"
15-
#import "IDEEditorDocument.h"
15+
#import "IDESourceCodeComparisonEditor.h"
16+
#import "IDESourceCodeDocument.h"
17+
#import "DVTFilePath.h"
1618

1719
#import "DVTTextStorage.h"
1820
#import "DVTLayoutManager+SCXcodeMinimap.h"
@@ -40,6 +42,12 @@
4042

4143
#import "NSScroller+SCXcodeMinimap.h"
4244

45+
#import "IDEWorkspaceWindowController.h"
46+
#import "IDEWorkspaceTabController.h"
47+
#import "IDEEditorArea+SCXcodeMinimap.h"
48+
#import "IDEEditorModeViewController.h"
49+
#import "IDEEditorContext.h"
50+
4351
typedef NS_ENUM(NSUInteger, SCXcodeMinimapAnnotationType) {
4452
SCXcodeMinimapAnnotationTypeUndefined,
4553
SCXcodeMinimapAnnotationTypeTypeWarning,
@@ -70,9 +78,13 @@ @interface SCXcodeMinimapView () < NSLayoutManagerDelegate,
7078
DBGBreakpointAnnotationProviderDelegate,
7179
IDEIssueAnnotationProviderDelegate,
7280
DVTLayoutManagerMinimapDelegate,
73-
IDESourceCodeEditorSearchResultsDelegate >
81+
IDESourceCodeEditorSearchResultsDelegate,
82+
IDEEditorAreaMinimapDelegate >
7483

7584
@property (nonatomic, weak) IDESourceCodeEditor *editor;
85+
86+
@property (nonatomic, weak) IDEEditorArea *editorArea;
87+
7688
@property (nonatomic, strong) DVTSourceTextView *editorTextView;
7789

7890
@property (nonatomic, strong) SCXcodeMinimapScrollView *scrollView;
@@ -120,7 +132,7 @@ - (instancetype)initWithEditor:(IDESourceCodeEditor *)editor
120132
[self.editor setSearchResultsDelegate:self];
121133

122134
self.editorTextView = editor.textView;
123-
135+
124136
[self setWantsLayer:YES];
125137
[self setAutoresizingMask:NSViewMinXMargin | NSViewMinYMargin | NSViewWidthSizable | NSViewHeightSizable];
126138

@@ -137,7 +149,7 @@ - (instancetype)initWithEditor:(IDESourceCodeEditor *)editor
137149
[self.scrollView setVerticalScrollElasticity:NSScrollElasticityNone];
138150
[self addSubview:self.scrollView];
139151

140-
self.textView = [[DVTSourceTextView alloc] init];
152+
self.textView = [[DVTSourceTextView alloc] initWithFrame:CGRectZero];
141153

142154
NSTextStorage *storage = self.editorTextView.textStorage;
143155
[self.textView setTextStorage:storage];
@@ -191,7 +203,7 @@ - (instancetype)initWithEditor:(IDESourceCodeEditor *)editor
191203

192204
__weak typeof(self) weakSelf = self;
193205
[self.notificationObservers addObject:[[NSNotificationCenter defaultCenter] addObserverForName:SCXcodeMinimapShouldDisplayChangeNotification object:nil queue:nil usingBlock:^(NSNotification *note) {
194-
[weakSelf setVisible:[[[NSUserDefaults standardUserDefaults] objectForKey:SCXcodeMinimapShouldDisplayKey] boolValue]];
206+
[weakSelf toggleVisibility];
195207
}]];
196208

197209
[self.notificationObservers addObject:[[NSNotificationCenter defaultCenter] addObserverForName:SCXcodeMinimapZoomLevelChangeNotification object:nil queue:nil usingBlock:^(NSNotification *note) {
@@ -241,7 +253,7 @@ - (instancetype)initWithEditor:(IDESourceCodeEditor *)editor
241253
}]];
242254

243255
[self.notificationObservers addObject:[[NSNotificationCenter defaultCenter] addObserverForName:SCXcodeMinimapAutohideChangeNotification object:nil queue:nil usingBlock:^(NSNotification *note) {
244-
[self tryShowing];
256+
[self toggleVisibility];
245257
}]];
246258

247259
[self.notificationObservers addObject:[[NSNotificationCenter defaultCenter] addObserverForName:SCXcodeMinimapThemeChangeNotification object:nil queue:nil usingBlock:^(NSNotification *note) {
@@ -268,23 +280,29 @@ - (void)viewDidMoveToWindow
268280
return;
269281
}
270282

271-
[self tryShowing];
283+
self.editorArea = [self getEditorArea];
284+
[self.editorArea setMinimapDelegate:self];
285+
286+
[self toggleVisibility];
272287
}
273288

274-
- (void)tryShowing
289+
- (void)toggleVisibility
275290
{
291+
BOOL visible = [[[NSUserDefaults standardUserDefaults] objectForKey:SCXcodeMinimapShouldDisplayKey] boolValue];
276292
BOOL shouldAutohide = [[[NSUserDefaults standardUserDefaults] objectForKey:SCXcodeMinimapShouldAutohideKey] boolValue];
277293

278-
if(shouldAutohide) {
279-
NSRange visibleEditorRange = [self.editorTextView visibleCharacterRange];
280-
if(NSEqualRanges(visibleEditorRange, NSMakeRange(0, self.textView.string.length))) {
281-
return;
294+
if(shouldAutohide && visible) {
295+
if(self.editorArea == nil || self.editorArea.editorMode) {
296+
visible = NO;
297+
} else {
298+
NSRange visibleEditorRange = [self.editorTextView visibleCharacterRange];
299+
if(NSEqualRanges(visibleEditorRange, NSMakeRange(0, self.textView.string.length))) {
300+
visible = NO;
301+
}
282302
}
283303
}
284304

285-
dispatch_async(dispatch_get_main_queue(), ^{
286-
[self setVisible:[[[NSUserDefaults standardUserDefaults] objectForKey:SCXcodeMinimapShouldDisplayKey] boolValue]];
287-
});
305+
[self setVisible:visible];
288306
}
289307

290308
#pragma mark - Show/Hide
@@ -463,6 +481,13 @@ - (void)foldingManager:(DVTFoldingManager *)foldingManager didUnfoldRange:(NSRan
463481
[self updateOffset];
464482
}
465483

484+
#pragma mark - IDEEditorAreaMinimapDelegate
485+
486+
- (void)editorAreaDidChangeEditorMode:(IDEEditorArea *)editorArea
487+
{
488+
[self toggleVisibility];
489+
}
490+
466491
#pragma mark - DBGBreakpointAnnotationProviderDelegate
467492

468493
- (void)breakpointAnnotationProviderDidChangeBreakpoints:(DBGBreakpointAnnotationProvider *)annotationProvider
@@ -693,9 +718,12 @@ - (void)updateTheme
693718
- (void)updateSize
694719
{
695720
CGFloat zoomLevel = [[[NSUserDefaults standardUserDefaults] objectForKey:SCXcodeMinimapZoomLevelKey] doubleValue];
696-
697721
CGFloat minimapWidth = (self.hidden ? 0.0f : self.editor.containerView.bounds.size.width * zoomLevel);
698722

723+
if(CGRectGetWidth(self.bounds) == minimapWidth) {
724+
return;
725+
}
726+
699727
NSRect editorScrollViewFrame = self.editor.scrollView.frame;
700728
editorScrollViewFrame.size.width = self.editor.scrollView.superview.frame.size.width - minimapWidth;
701729
self.editor.scrollView.frame = editorScrollViewFrame;
@@ -784,4 +812,57 @@ - (void)invalidateMinimap
784812
}
785813
}
786814

815+
- (IDEEditorArea *)getEditorArea
816+
{
817+
IDEWorkspaceWindowController *windowController = [IDEWorkspaceWindowController workspaceWindowControllerForWindow:self.window];
818+
if(!windowController) {
819+
return nil;
820+
}
821+
IDEWorkspaceTabController *tabController = nil;
822+
823+
for(IDEWorkspaceTabController *someTabController in windowController.workspaceTabControllers) {
824+
825+
NSView *superview = self.superview;
826+
while (superview) {
827+
if([superview isEqual:someTabController.view]) {
828+
tabController = someTabController;
829+
break;
830+
}
831+
832+
superview = superview.superview;
833+
}
834+
835+
if(tabController) {
836+
break;
837+
}
838+
}
839+
840+
if(!tabController) {
841+
return nil;
842+
}
843+
844+
if([tabController.editorArea.primaryEditorContext.editor isKindOfClass:[IDESourceCodeEditor class]]) {
845+
846+
IDEEditorDocument *document = self.editor.sourceCodeDocument;
847+
IDEEditorDocument *primaryDocument = tabController.editorArea.primaryEditorDocument;
848+
IDEEditorDocument *alternateDocument = tabController.editorArea.editorModeViewController.selectedAlternateEditorContext.editor.document;
849+
850+
if([document isEqualTo:primaryDocument] || [document isEqualTo:alternateDocument] ||
851+
[document.filePath.fileName isEqualToString:primaryDocument.filePath.fileName] ||
852+
[document.filePath.fileName isEqualToString:alternateDocument.filePath.fileName]) {
853+
return tabController.editorArea;
854+
}
855+
856+
} else if([tabController.editorArea.primaryEditorContext.editor isKindOfClass:[IDESourceCodeComparisonEditor class]]) {
857+
858+
IDESourceCodeComparisonEditor *editor = (IDESourceCodeComparisonEditor *)tabController.editorArea.primaryEditorContext.editor;
859+
860+
if([editor.primaryDocument isEqualTo:self.editor.sourceCodeDocument] || [editor.secondaryDocument isEqualTo:self.editor.sourceCodeDocument]) {
861+
return tabController.editorArea;
862+
}
863+
}
864+
865+
return nil;
866+
}
867+
787868
@end

0 commit comments

Comments
 (0)