We need to balanace with a [release] call
[macgdbp.git] / Source / BreakpointWindowController.m
1 /*
2 * MacGDBp
3 * Copyright (c) 2007 - 2008, 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 "BreakpointWindowController.h"
18 #import "AppDelegate.h"
19
20
21 @implementation BreakpointWindowController
22
23 @synthesize sourceView, arrayController;
24
25 /**
26 * Constructor
27 */
28 - (id)init
29 {
30 if (self = [super initWithWindowNibName:@"Breakpoints"])
31 {
32 manager = [BreakpointManager sharedManager];
33 }
34 return self;
35 }
36
37 /**
38 * Adds a breakpoint by calling up a file chooser and selecting a file for
39 * breaking in
40 */
41 - (IBAction)addBreakpoint:(id)sender
42 {
43 NSOpenPanel *panel = [NSOpenPanel openPanel];
44
45 if ([panel runModal] != NSOKButton)
46 {
47 return;
48 }
49
50 [sourceView setFile:[panel filename]];
51 }
52
53 /**
54 * Removes a breakpoint
55 */
56 - (IBAction)removeBreakpoint:(id)sender
57 {
58 NSArray *selection = [arrayController selectedObjects];
59 if ([selection count] < 1)
60 {
61 return;
62 }
63
64 Breakpoint *bp = [selection objectAtIndex:0];
65 [manager removeBreakpointAt:[bp line] inFile:[bp file]];
66 }
67
68 #pragma mark NSTableView Delegate
69
70 /**
71 * NSTableView delegate method that informs the controller that the stack selection did change and that
72 * we should update the source viewer
73 */
74 - (void)tableViewSelectionDidChange:(NSNotification *)notif
75 {
76 NSArray *selection = [arrayController selectedObjects];
77 if ([selection count] < 1)
78 {
79 return;
80 }
81
82 Breakpoint *bp = [selection objectAtIndex:0];
83 [sourceView setFile:[bp file]];
84 [sourceView scrollToLine:[bp line]];
85 [[sourceView numberView] setMarkers:[NSSet setWithArray:[manager breakpointsForFile:[bp file]]]];
86 }
87
88 #pragma mark BSSourceView Delegate
89
90 /**
91 * The gutter was clicked, which indicates that a breakpoint needs to be changed
92 */
93 - (void)gutterClickedAtLine:(int)line forFile:(NSString *)file
94 {
95 if ([manager hasBreakpointAt:line inFile:file])
96 {
97 [manager removeBreakpointAt:line inFile:file];
98 }
99 else
100 {
101 Breakpoint *bp = [[Breakpoint alloc] initWithLine:line inFile:file];
102 [manager addBreakpoint:bp];
103 [bp release];
104 }
105
106 [[sourceView numberView] setMarkers:[NSSet setWithArray:[manager breakpointsForFile:file]]];
107 [[sourceView numberView] setNeedsDisplay:YES];
108 }
109
110 @end