8
8
9
9
#import " IDESourceCodeEditor+XVim.h"
10
10
#import " IDEKit.h"
11
+ #import " DVTFoundation.h"
11
12
#import " XVimWindow.h"
12
13
#import " Logger.h"
13
14
#import " XVimStatusLine.h"
14
15
#import " XVim.h"
15
16
#import " NSObject+XVimAdditions.h"
17
+ #import " NSobject+ExtraData.h"
16
18
17
19
@implementation IDESourceCodeEditor (XVim)
18
20
+ (void )xvim_initialize {
19
21
[self xvim_swizzleInstanceMethod: @selector (textView:willChangeSelectionFromCharacterRanges:toCharacterRanges: ) with: @selector (xvim_textView:willChangeSelectionFromCharacterRanges:toCharacterRanges: )];
22
+ [self xvim_swizzleInstanceMethod: @selector (initWithNibName:bundle:document: ) with: @selector (xvim_initWithNibName:bundle:document: )];
20
23
}
21
24
22
25
- (NSArray *) xvim_textView : (NSTextView *)textView willChangeSelectionFromCharacterRanges : (NSArray *)oldSelectedCharRanges toCharacterRanges : (NSArray *)newSelectedCharRanges
23
26
{
24
27
return newSelectedCharRanges;
25
28
}
29
+
30
+ - (id )xvim_initWithNibName : (NSString *)name bundle : (NSBundle *)bundle document : (IDEEditorDocument*)doc {
31
+ id obj = [self xvim_initWithNibName: name bundle: bundle document: doc];
32
+ NSView * container = [[obj view ] contentView ];
33
+
34
+ // Insert status line
35
+ if ( nil != container ){
36
+ // TODO: Observe DVTFontAndColorSourceTextSettingsChangedNotification to change color of status bar
37
+ DVTSourceTextScrollView* scrollView = [self mainScrollView ];
38
+ [scrollView setTranslatesAutoresizingMaskIntoConstraints: NO ]; // To use autolayout we need set this NO
39
+
40
+ // Add status view
41
+ XVimStatusLine* status = [[XVimStatusLine alloc ] initWithString: doc.filePath.pathString];
42
+ [status setTranslatesAutoresizingMaskIntoConstraints: NO ];
43
+ [container addSubview: status];
44
+
45
+ // Bind its visibility to 'laststatus'
46
+ XVimLaststatusTransformer* transformer = [[XVimLaststatusTransformer alloc ] init ];
47
+ [status bind: @" hidden" toObject: [[XVim instance ] options ] withKeyPath: @" laststatus" options: @{NSValueTransformerBindingOption :transformer}];
48
+
49
+
50
+ // View autolayout constraints (for the source view and status bar)
51
+
52
+ // Same width with the parent
53
+ [container addConstraint: [NSLayoutConstraint constraintWithItem: scrollView
54
+ attribute: NSLayoutAttributeWidth
55
+ relatedBy: NSLayoutRelationEqual
56
+ toItem: container
57
+ attribute: NSLayoutAttributeWidth
58
+ multiplier: 1.0
59
+ constant: 0.0 ]];
60
+
61
+ // ScrollView's left position is 0
62
+ [container addConstraint: [NSLayoutConstraint constraintWithItem: scrollView
63
+ attribute: NSLayoutAttributeLeft
64
+ relatedBy: NSLayoutRelationEqual
65
+ toItem: container
66
+ attribute: NSLayoutAttributeLeft
67
+ multiplier: 1.0
68
+ constant: 0.0 ]];
69
+ // Position scrollView above the status bar
70
+ [container addConstraint: [NSLayoutConstraint constraintWithItem: scrollView
71
+ attribute: NSLayoutAttributeBottom
72
+ relatedBy: NSLayoutRelationEqual
73
+ toItem: status
74
+ attribute: NSLayoutAttributeTop
75
+ multiplier: 1.0
76
+ constant: 0 ]];
77
+ // ScrollView fills to top of the container view
78
+ [container addConstraint: [NSLayoutConstraint constraintWithItem: scrollView
79
+ attribute: NSLayoutAttributeTop
80
+ relatedBy: NSLayoutRelationEqual
81
+ toItem: container
82
+ attribute: NSLayoutAttributeTop
83
+ multiplier: 1.0
84
+ constant: 0.0 ]];
85
+ // Place Status line at bottom edge
86
+ [container addConstraint: [NSLayoutConstraint constraintWithItem: status
87
+ attribute: NSLayoutAttributeBottom
88
+ relatedBy: NSLayoutRelationEqual
89
+ toItem: container
90
+ attribute: NSLayoutAttributeBottom
91
+ multiplier: 1.0
92
+ constant: 0.0 ]];
93
+ // Status line width fills the container
94
+ [container addConstraint: [NSLayoutConstraint constraintWithItem: status
95
+ attribute: NSLayoutAttributeWidth
96
+ relatedBy: NSLayoutRelationEqual
97
+ toItem: container
98
+ attribute: NSLayoutAttributeWidth
99
+ multiplier: 1.0
100
+ constant: 0.0 ]];
101
+ }
102
+
103
+ return obj;
104
+ }
26
105
@end
0 commit comments