3 * Copyright (c) 2007 - 2011, Blue Static <http://www.bluestatic.org>
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.
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.
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
17 #import "BreakpointController.h"
19 #import "AppDelegate.h"
20 #import "PreferenceNames.h"
22 @implementation BreakpointController
24 @synthesize sourceView
, arrayController
;
31 if (self = [super initWithNibName
:@
"Breakpoints" bundle
:nil])
33 manager
= [BreakpointManager sharedManager
];
39 * Adds a breakpoint by calling up a file chooser and selecting a file for
42 - (IBAction
)addBreakpoint
:(id)sender
44 NSOpenPanel
* panel
= [NSOpenPanel openPanel
];
46 if ([panel runModal
] != NSOKButton
)
51 [sourceView setFile
:[[panel URL
] path
]];
55 * Removes a breakpoint
57 - (IBAction
)removeBreakpoint
:(id)sender
59 NSArray
* selection
= [arrayController selectedObjects
];
60 if ([selection count
] < 1)
65 for (Breakpoint
* bp
in selection
)
67 [manager removeBreakpointAt
:[bp line
] inFile
:[bp file
]];
71 #pragma mark NSTableView Delegate
74 * NSTableView delegate method that informs the controller that the stack selection did change and that
75 * we should update the source viewer
77 - (void)tableViewSelectionDidChange
:(NSNotification
*)notif
79 NSArray
* selection
= [arrayController selectedObjects
];
80 if ([selection count
] < 1)
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
]]]];
91 #pragma mark BSSourceView Delegate
94 * The gutter was clicked, which indicates that a breakpoint needs to be changed
96 - (void)gutterClickedAtLine
:(NSUInteger
)line forFile
:(NSString
*)file
98 if ([manager hasBreakpointAt
:line inFile
:file
])
100 [manager removeBreakpointAt
:line inFile
:file
];
104 Breakpoint
* bp
= [[Breakpoint alloc
] initWithLine
:line inFile
:file
];
105 [manager addBreakpoint
:bp
];
109 [sourceView setMarkers
:[NSSet setWithArray
:[manager breakpointsForFile
:file
]]];
110 [sourceView setNeedsDisplay
:YES
];
114 * Accepts a file dragged to set the contents of the display.
116 - (BOOL)sourceView
:(BSSourceView
*)sv acceptsDropOfFile
:(NSString
*)filename