Move the Eval window into a tabbed section.
[macgdbp.git] / Source / BreakpointController.m
1 /*
2 * MacGDBp
3 * Copyright (c) 2007 - 2011, Blue Static <http://www.bluestatic.org>
4 *
5 * This program is free software; you can redistribute it and/or modify it under the terms of the GNU
6 * General Public License as published by the Free Software Foundation; either version 2 of the
7 * License, or (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
10 * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 * General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License along with this program; if not,
14 * write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
15 */
16
17 #import "BreakpointController.h"
18
19 #import "AppDelegate.h"
20 #import "PreferenceNames.h"
21
22 @implementation BreakpointController
23
24 @synthesize sourceView, arrayController;
25
26 /**
27 * Constructor
28 */
29 - (id)init
30 {
31 if (self = [super initWithNibName:@"Breakpoints" bundle:nil])
32 {
33 manager = [BreakpointManager sharedManager];
34 }
35 return self;
36 }
37
38 /**
39 * Adds a breakpoint by calling up a file chooser and selecting a file for
40 * breaking in
41 */
42 - (IBAction)addBreakpoint:(id)sender
43 {
44 NSOpenPanel* panel = [NSOpenPanel openPanel];
45
46 if ([panel runModal] != NSOKButton)
47 {
48 return;
49 }
50
51 [sourceView setFile:[[panel URL] path]];
52 }
53
54 /**
55 * Removes a breakpoint
56 */
57 - (IBAction)removeBreakpoint:(id)sender
58 {
59 NSArray* selection = [arrayController selectedObjects];
60 if ([selection count] < 1)
61 {
62 return;
63 }
64
65 for (Breakpoint* bp in selection)
66 {
67 [manager removeBreakpointAt:[bp line] inFile:[bp file]];
68 }
69 }
70
71 #pragma mark NSTableView Delegate
72
73 /**
74 * NSTableView delegate method that informs the controller that the stack selection did change and that
75 * we should update the source viewer
76 */
77 - (void)tableViewSelectionDidChange:(NSNotification*)notif
78 {
79 NSArray* selection = [arrayController selectedObjects];
80 if ([selection count] < 1)
81 {
82 return;
83 }
84
85 Breakpoint* bp = [selection objectAtIndex:0];
86 [sourceView setFile:[bp file]];
87 [sourceView scrollToLine:[bp line]];
88 [sourceView setMarkers:[NSSet setWithArray:[manager breakpointsForFile:[bp file]]]];
89 }
90
91 #pragma mark BSSourceView Delegate
92
93 /**
94 * The gutter was clicked, which indicates that a breakpoint needs to be changed
95 */
96 - (void)gutterClickedAtLine:(NSUInteger)line forFile:(NSString*)file
97 {
98 if ([manager hasBreakpointAt:line inFile:file])
99 {
100 [manager removeBreakpointAt:line inFile:file];
101 }
102 else
103 {
104 Breakpoint* bp = [[Breakpoint alloc] initWithLine:line inFile:file];
105 [manager addBreakpoint:bp];
106 [bp release];
107 }
108
109 [sourceView setMarkers:[NSSet setWithArray:[manager breakpointsForFile:file]]];
110 [sourceView setNeedsDisplay:YES];
111 }
112
113 /**
114 * Accepts a file dragged to set the contents of the display.
115 */
116 - (BOOL)sourceView:(BSSourceView*)sv acceptsDropOfFile:(NSString*)filename
117 {
118 return YES;
119 }
120
121 @end