73
75
// Function breakpoints only support breaking on the first line
74
76
hboxLineColumn.Destroy ();
75
77
labelLine.Destroy ();
78
tableLocation.NRows--;
78
80
labelFileFunction.LabelProp = GettextCatalog.GetString ("File:");
79
81
entryFileFunction.Text = ((Breakpoint) bp).FileName;
83
85
entryFileFunction.ModifyBase (Gtk.StateType.Active, Style.Backgrounds [(int)Gtk.StateType.Insensitive]);
84
86
entryFileFunction.IsEditable = false;
86
//spinColumn.Value = bp.Column;
88
spinColumn.Value = bp.Column;
87
89
spinLine.Value = bp.Line;
103
102
entryCondition.Text = bp.ConditionExpression;
104
103
if (bp.BreakIfConditionChanges)
105
radioBreakChange.Active = true;
104
radioBreakWhenChanges.Active = true;
107
radioBreakTrue.Active = true;
106
radioBreakWhenTrue.Active = true;
109
comboHitCountMode.Changed += OnHitCountModeChanged;
110
comboHitCountMode.Active = (int) bp.HitCountMode;
110
111
spinHitCount.Value = bp.HitCount;
112
if (bp.HitAction == HitAction.Break)
113
if (bp.HitAction == HitAction.Break) {
113
114
radioActionBreak.Active = true;
115
116
radioActionTrace.Active = true;
116
entryTraceExpr.Text = bp.TraceExpression;
117
entryTraceExpression.Text = bp.TraceExpression;
119
120
Project project = null;
123
124
if (project != null) {
124
125
// Check the startup project of the solution too, since the current project may be a library
125
126
SolutionEntityItem startup = project.ParentSolution.StartupItem;
126
boxConditionOptions.Sensitive = DebuggingService.IsFeatureSupported (project, DebuggerFeatures.ConditionalBreakpoints) ||
127
vboxConditionOptions.Sensitive = DebuggingService.IsFeatureSupported (project, DebuggerFeatures.ConditionalBreakpoints) ||
127
128
DebuggingService.IsFeatureSupported (startup, DebuggerFeatures.ConditionalBreakpoints);
128
boxAction.Sensitive = DebuggingService.IsFeatureSupported (project, DebuggerFeatures.Tracepoints) ||
129
vboxAction.Sensitive = DebuggingService.IsFeatureSupported (project, DebuggerFeatures.Tracepoints) ||
129
130
DebuggingService.IsFeatureSupported (startup, DebuggerFeatures.Tracepoints);
135
136
void UpdateControls ()
137
138
boxTraceExpression.Sensitive = radioActionTrace.Active;
138
boxCondition.Sensitive = !radioBreakAlways.Active;
139
hboxConditionExpression.Sensitive = !radioBreakAlways.Active;
141
if (comboHitCountMode.Active == 0)
142
spinHitCount.Hide ();
144
spinHitCount.Show ();
141
bool TryParseFunction (string signature, out string function, out string[] paramTypes)
147
static bool TryParseFunction (string signature, out string function, out string[] paramTypes)
143
// FIXME: this is a hack, but it'll work until we get actual language parsers...
144
149
int paramListStart = signature.IndexOf ('(');
147
if (paramListStart == -1) {
150
int paramListEnd = signature.IndexOf (')');
152
if (paramListStart == -1 && paramListEnd == -1) {
148
153
function = signature;
149
154
paramTypes = null;
158
if (paramListEnd != signature.Length - 1) {
153
function = signature.Substring (0, paramListStart).TrimEnd ();
164
function = signature.Substring (0, paramListStart).Trim ();
155
166
paramListStart++;
156
paramListEnd = paramListStart;
157
while (paramListEnd < signature.Length && signature[paramListEnd] != ')')
160
if (paramListEnd == signature.Length) {
168
if (!FunctionBreakpoint.TryParseParameters (signature, paramListStart, paramListEnd, out paramTypes)) {
166
paramTypes = signature.Substring (paramListStart, paramListEnd - paramListStart).Split (new char [] { ',' });
167
for (int i = 0; i < paramTypes.Length; i++)
168
paramTypes[i] = paramTypes[i].Trim ();
173
177
public bool Check ()
175
179
if (bp is FunctionBreakpoint) {
176
if (entryFileFunction.Text.Length == 0) {
180
string text = entryFileFunction.Text.Trim ();
182
if (text.Length == 0) {
177
183
MessageService.ShowError (GettextCatalog.GetString ("Function name not specified"));
181
if (!TryParseFunction (entryFileFunction.Text.Trim (), out parsedFunction, out parsedParamTypes)) {
187
if (!TryParseFunction (text, out parsedFunction, out parsedParamTypes)) {
182
188
MessageService.ShowError (GettextCatalog.GetString ("Invalid function syntax"));
206
212
fb.FunctionName = parsedFunction;
207
213
fb.ParamTypes = parsedParamTypes;
209
//bp.SetColumn ((int) spinColumn.Value);
215
bp.SetColumn ((int) spinColumn.Value);
210
216
bp.SetLine ((int) spinLine.Value);
214
220
if (!radioBreakAlways.Active) {
215
221
bp.ConditionExpression = entryCondition.Text;
216
bp.BreakIfConditionChanges = radioBreakChange.Active;
222
bp.BreakIfConditionChanges = radioBreakWhenChanges.Active;
218
224
bp.ConditionExpression = null;
220
bp.HitCount = (int) spinHitCount.Value;
222
if (radioActionBreak.Active)
226
bp.HitCountMode = (HitCountMode) comboHitCountMode.Active;
227
if (bp.HitCountMode != HitCountMode.None)
228
bp.HitCount = (int) spinHitCount.Value;
232
if (radioActionBreak.Active) {
223
233
bp.HitAction = HitAction.Break;
225
235
bp.HitAction = HitAction.PrintExpression;
226
bp.TraceExpression = entryTraceExpr.Text;
236
bp.TraceExpression = entryTraceExpression.Text;
228
239
bp.CommitChanges ();
231
protected virtual void OnButtonOkClicked (object sender, System.EventArgs e)
242
protected virtual void OnButtonOkClicked (object sender, EventArgs e)
239
protected virtual void OnRadioBreakAlwaysToggled (object sender, System.EventArgs e)
244
protected virtual void OnRadioActionBreakToggled (object sender, System.EventArgs e)
250
protected virtual void OnRadioBreakAlwaysToggled (object sender, EventArgs e)
255
protected virtual void OnRadioActionBreakToggled (object sender,EventArgs e)
260
void OnHitCountModeChanged (object sender, EventArgs e)
246
262
UpdateControls ();