Anonymous avatar Anonymous committed 5186095

scroll on resize

Comments (0)

Files changed (6)

MyPDFWinController.mm

     
     //initialize toolbar
     /*
-    [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(handlePageChange:) 
-                                                 name: PDFViewPageChangedNotification object: _pdfView];
+
     [self handlePageChange:nil];
     */
     
                                                  name: @"PDFDidBeginDocumentWrite" object: [_pdfView document]];
 	[[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(documentEndWrite:) 
                                                  name: @"PDFDidEndDocumentWrite" object: [_pdfView document]];
+     
 	[[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(documentEndPageWrite:) 
+    
     */
+    
+    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handlePageChange:) 
+                                                 name:TronPDFViewPageChangedNotification
+                                               object:_tronPDFView];
+    /*
+    [[NSNotificationCenter defaultCenter] addObserver:self 
+                                             selector:@selector(handleScrollPositionChange:) 
+                                                 name:TronPDFViewScrollChangedNotification
+                                               object:_tronPDFView];
+     */
 }
 
 #pragma mark    actions
 - (IBAction)doGoToNextPage:(id)sender
 {
     NSLog(@"in doGoToNextPage");
+    [_tronPDFView goToNextPage:sender];
+    //[_pdfScrollView setScroll:0.4 verticalPosition:0.5];
     //[_pdfView goToNextPage:sender];
+    
 }
 
 - (IBAction)doGoToPreviousPage:(id)sender
 {
-    NSLog(@"in doGoToPreviousPage");    
+    NSLog(@"in doGoToPreviousPage");
+    [_tronPDFView goToPreviousPage:sender];
     //[_pdfView goToPreviousPage:sender];
 }
 
      */
 }
 
+#pragma mark notification handlers
 - (void)handlePageChange:(NSNotification*) notification
 {
-    NSLog(@"updatePageNumField");
-    /*
-    [_pagesTextField setStringValue:[[_pdfView currentPage] label]];
-    
+    [_pagesTextField setStringValue:[NSString stringWithFormat:@"%d", 
+                                     [_tronPDFView currPageNum]]];
+ 
+/*    
     [_previousNextPageSegCtrl setEnabled:[_pdfView canGoToPreviousPage] forSegment:0];
     [_previousNextPageSegCtrl setEnabled:[_pdfView canGoToNextPage] forSegment:1];
      */
 }
 
+/*
+- (void)handleScrollPositionChange:(NSNotification*) notification
+{
+    [_pdfScrollView setScroll:[_tronPDFView currentHorizontalScrollPosition] 
+             verticalPosition:[_tronPDFView currentVerticalScrollPosition]];
+}
+*/
 - (IBAction)goPreviousNextPage:(id)sender
 {
     NSLog(@"goPreviousNextPage");
     NSInteger seg_index = [_previousNextPageSegCtrl selectedSegment];
     if (seg_index == 0) {
-        //[_pdfView goToPreviousPage:sender];
+        //[_tronPDFView goToPreviousPage:sender];
+        [self doGoToPreviousPage:sender];
     }
     else if (seg_index == 1) {
-        //[_pdfView goToNextPage:sender];
+        //[_tronPDFView goToNextPage:sender];
+        [self doGoToNextPage:sender];
     }
 }
 
 
 #include <PDF/PDFView.h>
 
+extern NSString * TronPDFViewPageChangedNotification;
+extern NSString * TronPDFViewScrollChangedNotification;
+
 @interface TronPDFView : NSView {
+@private    
     pdftron::PDF::PDFView * _tronPDFView;
     std::vector<char> _buf;
 }
 
 - (void)windowResized:(NSNotification *)notification;
 
-- (void)SetScroll:(float)hPos vPos:(float)vPos;
+- (void)setScroll:(float)hPos verticalPosition:(float)vPos;
+
+#pragma mark notificaitons
+-(void)postPageChangeNotification;
+-(void)postScrollChangeNotification;
+
+#pragma mark PDFView wrapper
+-(int) currPageNum;
+-(void) goToNextPage:(id)sender;
+-(void) goToPreviousPage:(id)sender;
+
+-(double)currentHorizontalScrollPosition;
+-(double)currentVerticalScrollPosition;
 
 #pragma mark c callbacks 
 void beginRendering(void* data);
 //
 
 #import "TronPDFView.h"
+#import "TronScrollView.h"
+
+NSString * TronPDFViewPageChangedNotification = @"TronPDFViewPageChangedNotification";
+NSString * TronPDFViewScrollChangedNotification = @"TronPDFViewScrollChangedNotification";
 
 @implementation TronPDFView
 
 #pragma mark callback functions
 void beginRendering(void* data) {
-
 }
 
 void endRendering(void* data, bool canceled) {
-    NSLog(@"end rendering");
     if (!canceled) {
         NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
         [(TronPDFView*)data setNeedsDisplay:YES];
 }
 
 void currPageProc(int current_page, int num_pages, void *data) {
+    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
+    [(TronPDFView*)data postPageChangeNotification];
+    [pool drain];
 }
 
 /**
     dst[dst_idx + 3] = src[src_idx + 3];
 }
 
+#pragma mark private helper methods
+
+-(BOOL)doesPDFViewHaveDoc {
+    return (_tronPDFView && _tronPDFView->GetDoc());
+}
+
 #pragma mark objc code 
 
 @synthesize tronPDFView = _tronPDFView;
 }
 
 - (void)drawRect:(NSRect)dirtyRect {
-    if (_tronPDFView->GetDoc()) {
+    if ([self doesPDFViewHaveDoc]) {
         const char* bgra = _tronPDFView->GetBuffer();
         if (bgra) {
             int width = _tronPDFView->GetBufferWidth();
             
             CGImageRef cgImage = CGBitmapContextCreateImage(bitmapContext);
             
-            /*__strong*/ NSGraphicsContext * nsGraphicsContext = [NSGraphicsContext currentContext];
-            /*__strong*/ CGContextRef zCgContextRef = (CGContextRef) [nsGraphicsContext graphicsPort];            
+            __strong NSGraphicsContext * nsGraphicsContext = [NSGraphicsContext currentContext];
+            __strong CGContextRef zCgContextRef = (CGContextRef) [nsGraphicsContext graphicsPort];            
             
             CGRect	zCgRect	= NSRectToCGRect([[self superview] bounds]);
 
         [self windowResized:nil];
     }
 }
-
+/*
 - (void)viewDidMoveToWindow
 {
+    [super viewDidMoveToWindow];
     [[NSNotificationCenter defaultCenter] addObserver:self 
                                              selector:@selector(windowResized:) 
                                                  name:NSWindowDidResizeNotification 
                                                object:[self window]];
 }
+  
+ */
+
 
 - (void)windowResized:(NSNotification *)notification;
 {
     
         double w = _tronPDFView->GetCanvasWidth();
         double h = _tronPDFView->GetCanvasHeight();
-        [self setFrame:NSMakeRect(0.0, 0.0, w, h)];
-        
+        [self setFrameSize:NSMakeSize(w, h)];
+
         //allocate buffer
         _buf.resize(width * height * 4, NULL);
+        
+        [self setNeedsDisplay:YES];
     }
 }
 
     NSLog(@"keyUp");
 }
 
-- (void)SetScroll:(float)hPos vPos:(float)vPos {
-    if (_tronPDFView && _tronPDFView->GetDoc()) {
+- (void)setScroll:(float)hPos verticalPosition:(float)vPos {
+    if ([self doesPDFViewHaveDoc]) {
         double final_hPos = hPos * _tronPDFView->GetCanvasWidth();
         double final_vPos = vPos * _tronPDFView->GetCanvasHeight();
+        //[self scrollPoint:NSMakePoint(final_hPos, final_vPos)];
         _tronPDFView->SetHScrollPos(final_hPos);
         _tronPDFView->SetVScrollPos(final_vPos);
         _tronPDFView->Update();
     }
 }
 
+#pragma mark notifications
+
+-(void)postPageChangeNotification {
+    [[NSNotificationCenter defaultCenter] postNotificationName:TronPDFViewPageChangedNotification
+                                                        object:self];
+}
+
+-(void)postScrollChangeNotification {
+    NSLog(@"postScrollChangeNotification");
+    [[NSNotificationCenter defaultCenter] postNotificationName:TronPDFViewScrollChangedNotification
+                                                        object:self];
+     
+}
+
+#pragma mark PDFView Wrapper
+-(int)currPageNum {
+    int currPageNum = 0;
+    if ([self doesPDFViewHaveDoc]) {
+        currPageNum = _tronPDFView->GetCurrentPage();
+    }
+    return currPageNum;
+}
+
+-(double)currentHorizontalScrollPosition {
+    double hPos = 0.0;
+    if ([self doesPDFViewHaveDoc]) {
+        hPos = _tronPDFView->GetHScrollPos() / _tronPDFView->GetCanvasWidth();
+    }
+    return hPos;
+}
+
+-(double)currentVerticalScrollPosition {
+    double vPos = 0.0;
+    if ([self doesPDFViewHaveDoc]) {
+        vPos = _tronPDFView->GetVScrollPos() / _tronPDFView->GetCanvasHeight();
+    }
+    return vPos;
+}
+
+-(void)goToNextPage:(id)sender {
+    if ([self doesPDFViewHaveDoc]) {
+        _tronPDFView->GotoNextPage();
+        _tronPDFView->Update();
+        [self postScrollChangeNotification];
+        [self setNeedsDisplay:YES];
+    }
+}
+
+-(void)goToPreviousPage:(id)sender {
+    if ([self doesPDFViewHaveDoc]) {
+        _tronPDFView->GotoPreviousPage();
+        _tronPDFView->Update();
+        [self postScrollChangeNotification];
+        [self setNeedsDisplay:YES];
+    }
+}
+
 @end
 
 }
 
+-(void)handleScrollChange:(NSNotification *)notfication;
+-(void)handleFrameChange:(NSNotification *)notification;
+-(void)setScroll:(double) horizontalPosition verticalPosition:(double) vPos;
+
 @end

TronScrollView.mm

 
 @implementation TronScrollView
 
--(void)scrollWheel:(NSEvent *)theEvent {
-    [super scrollWheel:theEvent];
+-(void)viewDidMoveToWindow {
+    [super viewDidMoveToWindow];
+    [[NSNotificationCenter defaultCenter] addObserver:self 
+                                             selector:@selector(handleFrameChange:) 
+                                                 name:NSViewFrameDidChangeNotification 
+                                               object:self];
+    /*
+    [[NSNotificationCenter defaultCenter] addObserver:self
+                                            selector:@selector(handleScrollChange:)
+                                                 name:TronPDFViewScrollChangedNotification object:[self documentView]];
+     */
+}
+
+-(BOOL)scrollsDynamically {
+    return YES;
+}
+
+-(void)reflectScrolledClipView:(NSClipView *)cView {
+    NSLog(@"reflectScrolledClipView");
+    [super reflectScrolledClipView:cView];
     TronPDFView * pdfView = [self documentView];
     float vPos = [[self verticalScroller] floatValue];
     float hPos = [[self horizontalScroller] floatValue];
-    [pdfView SetScroll:hPos vPos:vPos];
+    [pdfView setScroll:hPos verticalPosition:vPos];
 }
 
+-(void)handleScrollChange:(NSNotification*)notfication {
+    NSLog(@"TronScrollView handleScrollChange");
+    TronPDFView * pdfView = [self documentView];
+    [self setScroll:[pdfView currentHorizontalScrollPosition] verticalPosition:[pdfView currentVerticalScrollPosition]];
+}
+     
+     
+-(void)handleFrameChange:(NSNotification*)notification {
+    NSLog(@"TronScrollView handleFrameChanged");
+    TronPDFView * pdfView = [self documentView];
+    NSScroller * hScroller = [self horizontalScroller];
+    NSScroller * vScroller = [self verticalScroller];
+    float oldh = [hScroller floatValue];
+    float oldv = [vScroller floatValue];
+    [pdfView windowResized:nil];
+    float h = [hScroller floatValue];
+    float v = [vScroller floatValue];
+    [self setScroll:oldh verticalPosition:oldv];
+    NSLog(@"oldh: %0.4f, oldV: %0.4f, h: %0.4f, v: %0.4f", oldh, oldv, h, v);
+}
+
+
+-(void)setScroll:(double) horizontalPosition verticalPosition:(double) vPos {
+    NSLog(@"TronScrollView setScroll");
+    NSScroller * hScroller = [self horizontalScroller];
+    NSScroller * vScroller = [self verticalScroller];
+    
+    if (hScroller) {
+        [hScroller setDoubleValue:horizontalPosition];
+    }
+    
+    if (vScroller) {
+        [vScroller setDoubleValue:vPos];
+    }
+}
+
+
 @end

cocoapdf.xcodeproj/quincy.mode1v3

 			<key>Content</key>
 			<dict>
 				<key>PBXProjectModuleGUID</key>
-				<string>2480624E120E8D9900A8420F</string>
+				<string>24D75F2A120FD4B9008529E9</string>
 				<key>PBXProjectModuleLabel</key>
 				<string>TronPDFView.mm</string>
 				<key>PBXSplitModuleInNavigatorKey</key>
 					<key>Split0</key>
 					<dict>
 						<key>PBXProjectModuleGUID</key>
-						<string>24806252120E8DAF00A8420F</string>
+						<string>24D75F2E120FD4FA008529E9</string>
 						<key>PBXProjectModuleLabel</key>
 						<string>TronPDFView.mm</string>
 						<key>_historyCapacity</key>
 						<integer>0</integer>
 						<key>bookmark</key>
-						<string>248062AB120E95F800A8420F</string>
+						<string>2403A5C91218E1B5004855EE</string>
 						<key>history</key>
 						<array>
-							<string>24806289120E92B700A8420F</string>
-							<string>24806291120E92E700A8420F</string>
+							<string>24D75F34120FD62F008529E9</string>
+							<string>24D75F9A120FE338008529E9</string>
+							<string>24D75FAA120FF3B8008529E9</string>
+							<string>24EAD9A012177DE40017DCEF</string>
+							<string>2403A4CB1218C392004855EE</string>
+							<string>2403A4D51218C443004855EE</string>
+							<string>2403A4F31218C911004855EE</string>
+							<string>2403A5C81218E1B5004855EE</string>
+							<string>2403A5BC1218DB21004855EE</string>
 						</array>
 					</dict>
 					<key>SplitCount</key>
 			<key>Geometry</key>
 			<dict>
 				<key>Frame</key>
-				<string>{{0, 20}, {808, 502}}</string>
+				<string>{{0, 20}, {754, 523}}</string>
 				<key>PBXModuleWindowStatusBarHidden2</key>
 				<false/>
 				<key>RubberWindowFrame</key>
-				<string>264 152 808 543 0 0 1280 778 </string>
+				<string>177 159 754 564 0 0 1280 778 </string>
 			</dict>
 		</dict>
 	</array>
 			<key>Layout</key>
 			<array>
 				<dict>
+					<key>BecomeActive</key>
+					<true/>
 					<key>ContentConfiguration</key>
 					<dict>
 						<key>PBXBottomSmartGroupGIDs</key>
 							<real>352</real>
 						</array>
 						<key>RubberWindowFrame</key>
-						<string>190 177 788 504 0 0 1280 778 </string>
+						<string>485 148 788 504 0 0 1280 778 </string>
 					</dict>
 					<key>Module</key>
 					<string>PBXSmartGroupTreeModule</string>
 										<key>_historyCapacity</key>
 										<integer>0</integer>
 										<key>bookmark</key>
-										<string>248062AA120E95F800A8420F</string>
+										<string>2403A5C71218E1B5004855EE</string>
 										<key>history</key>
 										<array>
 											<string>241D2A8211FBCBED0067260B</string>
 											<string>241D2ABA11FBE6FD0067260B</string>
 											<string>247587CE11FD10DB00F243C8</string>
 											<string>2479D4AF11FD2A100022D97A</string>
-											<string>24926A6011FD7BB1000C72BD</string>
 											<string>24247E1211FED76E00B478C1</string>
 											<string>24204F5811FFEA7D005F35FB</string>
 											<string>24204F7411FFEAFA005F35FB</string>
 											<string>246738851206E1F400157160</string>
 											<string>24E4BEA71207A02F00CA10EA</string>
 											<string>24E4BECC1207A25400CA10EA</string>
-											<string>2480627B120E923C00A8420F</string>
-											<string>2480627C120E923C00A8420F</string>
+											<string>24D75F21120FD487008529E9</string>
+											<string>24D75F4B120FD9A1008529E9</string>
+											<string>24EAD956121747910017DCEF</string>
+											<string>2403A4AB1218BEF4004855EE</string>
 										</array>
 									</dict>
 									<key>SplitCount</key>
 							<key>GeometryConfiguration</key>
 							<dict>
 								<key>Frame</key>
-								<string>{{0, 0}, {414, 138}}</string>
+								<string>{{0, 0}, {414, 75}}</string>
 								<key>RubberWindowFrame</key>
-								<string>190 177 788 504 0 0 1280 778 </string>
+								<string>485 148 788 504 0 0 1280 778 </string>
 							</dict>
 							<key>Module</key>
 							<string>PBXNavigatorGroup</string>
 							<key>Proportion</key>
-							<string>138pt</string>
+							<string>75pt</string>
 						</dict>
 						<dict>
-							<key>BecomeActive</key>
-							<true/>
 							<key>ContentConfiguration</key>
 							<dict>
 								<key>PBXProjectModuleGUID</key>
 							<key>GeometryConfiguration</key>
 							<dict>
 								<key>Frame</key>
-								<string>{{0, 143}, {414, 320}}</string>
+								<string>{{0, 80}, {414, 383}}</string>
 								<key>RubberWindowFrame</key>
-								<string>190 177 788 504 0 0 1280 778 </string>
+								<string>485 148 788 504 0 0 1280 778 </string>
 							</dict>
 							<key>Module</key>
 							<string>XCDetailModule</string>
 							<key>Proportion</key>
-							<string>320pt</string>
+							<string>383pt</string>
 						</dict>
 					</array>
 					<key>Proportion</key>
 			</array>
 			<key>TableOfContents</key>
 			<array>
-				<string>24806240120E8D7800A8420F</string>
+				<string>2403A3D91218B168004855EE</string>
 				<string>1CE0B1FE06471DED0097A5F4</string>
-				<string>24806241120E8D7800A8420F</string>
+				<string>2403A3DA1218B168004855EE</string>
 				<string>1CE0B20306471E060097A5F4</string>
 				<string>1CE0B20506471E060097A5F4</string>
 			</array>
 	<key>PerspectivesBarVisible</key>
 	<false/>
 	<key>PinnedNavigatorIdentifier</key>
-	<string>2480624E120E8D9900A8420F</string>
+	<string>24D75F2A120FD4B9008529E9</string>
 	<key>ShelfIsVisible</key>
 	<false/>
 	<key>SourceDescription</key>
 	<integer>5</integer>
 	<key>WindowOrderList</key>
 	<array>
-		<string>2480624B120E8D7800A8420F</string>
-		<string>2480624C120E8D7800A8420F</string>
+		<string>2403A5AB1218CDDC004855EE</string>
+		<string>2403A4B41218BEF4004855EE</string>
+		<string>2403A4B51218BEF4004855EE</string>
 		<string>1CD10A99069EF8BA00B06720</string>
 		<string>2492503F11CB2A5D0076F523</string>
 		<string>/Users/quincy/Repositories/CocoaPDF/cocoapdf.xcodeproj</string>
 		<string>1C78EAAD065D492600B07095</string>
-		<string>2480624E120E8D9900A8420F</string>
+		<string>24D75F2A120FD4B9008529E9</string>
 	</array>
 	<key>WindowString</key>
-	<string>190 177 788 504 0 0 1280 778 </string>
+	<string>485 148 788 504 0 0 1280 778 </string>
 	<key>WindowToolsV3</key>
 	<array>
 		<dict>
 			<key>TableOfContents</key>
 			<array>
 				<string>2492503F11CB2A5D0076F523</string>
-				<string>24806242120E8D7800A8420F</string>
+				<string>2403A3DC1218B168004855EE</string>
 				<string>1CD0528F0623707200166675</string>
 				<string>XCMainBuildResultsModuleGUID</string>
 			</array>
 									<key>Frame</key>
 									<string>{{461, 0}, {637, 325}}</string>
 									<key>RubberWindowFrame</key>
-									<string>143 110 1098 655 0 0 1280 778 </string>
+									<string>148 123 1098 655 0 0 1280 778 </string>
 								</dict>
 								<key>RubberWindowFrame</key>
-								<string>143 110 1098 655 0 0 1280 778 </string>
+								<string>148 123 1098 655 0 0 1280 778 </string>
 							</dict>
 							<key>Module</key>
 							<string>PBXDebugSessionModule</string>
 			<key>TableOfContents</key>
 			<array>
 				<string>1CD10A99069EF8BA00B06720</string>
-				<string>24806243120E8D7800A8420F</string>
+				<string>2403A3DD1218B168004855EE</string>
 				<string>1C162984064C10D400B95A72</string>
-				<string>24806244120E8D7800A8420F</string>
-				<string>24806245120E8D7800A8420F</string>
-				<string>24806246120E8D7800A8420F</string>
-				<string>24806247120E8D7800A8420F</string>
-				<string>24806248120E8D7800A8420F</string>
+				<string>2403A3DE1218B168004855EE</string>
+				<string>2403A3DF1218B168004855EE</string>
+				<string>2403A3E01218B168004855EE</string>
+				<string>2403A3E11218B168004855EE</string>
+				<string>2403A3E21218B168004855EE</string>
 			</array>
 			<key>ToolbarConfiguration</key>
 			<string>xcode.toolbar.config.debugV3</string>
 			<key>WindowString</key>
-			<string>143 110 1098 655 0 0 1280 778 </string>
+			<string>148 123 1098 655 0 0 1280 778 </string>
 			<key>WindowToolGUID</key>
 			<string>1CD10A99069EF8BA00B06720</string>
 			<key>WindowToolIsVisible</key>
 							<key>GeometryConfiguration</key>
 							<dict>
 								<key>Frame</key>
-								<string>{{0, 0}, {1045, 424}}</string>
+								<string>{{0, 0}, {730, 510}}</string>
 								<key>RubberWindowFrame</key>
-								<string>235 237 1045 465 0 0 1280 778 </string>
+								<string>484 193 730 551 0 0 1280 778 </string>
 							</dict>
 							<key>Module</key>
 							<string>PBXDebugCLIModule</string>
 							<key>Proportion</key>
-							<string>424pt</string>
+							<string>510pt</string>
 						</dict>
 					</array>
 					<key>Proportion</key>
-					<string>424pt</string>
+					<string>510pt</string>
 				</dict>
 			</array>
 			<key>Name</key>
 			<key>TableOfContents</key>
 			<array>
 				<string>1C78EAAD065D492600B07095</string>
-				<string>24806249120E8D7800A8420F</string>
+				<string>2403A4B21218BEF4004855EE</string>
 				<string>1C78EAAC065D492600B07095</string>
 			</array>
 			<key>ToolbarConfiguration</key>
 			<string>xcode.toolbar.config.consoleV3</string>
 			<key>WindowString</key>
-			<string>235 237 1045 465 0 0 1280 778 </string>
+			<string>484 193 730 551 0 0 1280 778 </string>
 			<key>WindowToolGUID</key>
 			<string>1C78EAAD065D492600B07095</string>
 			<key>WindowToolIsVisible</key>
 			<true/>
 			<key>TableOfContents</key>
 			<array>
-				<string>24247D1011FE876E00B478C1</string>
-				<string>24247D1111FE876E00B478C1</string>
+				<string>2403A5AB1218CDDC004855EE</string>
+				<string>2403A5AC1218CDDC004855EE</string>
 				<string>1CE0B1FE06471DED0097A5F4</string>
 				<string>1CA1AED706398EBD00589147</string>
 			</array>
 			<key>WindowString</key>
 			<string>201 219 744 409 0 0 1280 778 </string>
 			<key>WindowToolGUID</key>
-			<string>24247D1011FE876E00B478C1</string>
+			<string>2403A5AB1218CDDC004855EE</string>
 			<key>WindowToolIsVisible</key>
 			<false/>
 		</dict>
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.