88
99#import " IDESourceCodeEditor+XVim.h"
1010#import " IDEKit.h"
11+ #import " DVTFoundation.h"
1112#import " XVimWindow.h"
1213#import " Logger.h"
1314#import " XVimStatusLine.h"
1415#import " XVim.h"
1516#import " NSObject+XVimAdditions.h"
17+ #import " NSobject+ExtraData.h"
1618
1719@implementation IDESourceCodeEditor (XVim)
1820+ (void )xvim_initialize {
1921 [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: )];
2023}
2124
2225- (NSArray *) xvim_textView : (NSTextView *)textView willChangeSelectionFromCharacterRanges : (NSArray *)oldSelectedCharRanges toCharacterRanges : (NSArray *)newSelectedCharRanges
2326{
2427 return newSelectedCharRanges;
2528}
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+ }
26105@end
0 commit comments