X-Git-Url: https://git.sthu.org/?p=pygdb.git;a=blobdiff_plain;f=BreakpointsFrame.py;h=8450699eb4c5e970cd73837bf4ffba2ec177f436;hp=3216de661c4ed21ae8b55730a2a7003e7bf8bb31;hb=HEAD;hpb=9a8e5a643a533e00a2c8fdd6f03ea7b7a5e5d649 diff --git a/BreakpointsFrame.py b/BreakpointsFrame.py index 3216de6..8450699 100644 --- a/BreakpointsFrame.py +++ b/BreakpointsFrame.py @@ -11,15 +11,18 @@ import string import vte import DbgTerminal +import StatusFrame -class BreakpointsFrame (gtk.Frame): +class BreakpointsFrame (StatusFrame.StatusFrame): def __init__(self, debugger): - gtk.Frame.__init__(self, "Breakpoints") - self.debugger = debugger + StatusFrame.StatusFrame.__init__(self, debugger) + self.set_label("Breakpoints") + + debugger.gotActiveCallback += [self.updateValues] vbox = gtk.VBox(False, 5) self.add(vbox) @@ -48,6 +51,7 @@ class BreakpointsFrame (gtk.Frame): self.tv = gtk.TreeView(self.model) self.tv.set_rules_hint(True) self.tv.get_selection().set_mode(gtk.SELECTION_MULTIPLE) + self.tv.get_selection().connect("changed", self.selChanged) self.__addColumns(self.tv) sw.add(self.tv) @@ -84,6 +88,72 @@ class BreakpointsFrame (gtk.Frame): tv.append_column(col) + def selChanged(self, sel): + model, paths = sel.get_selected_rows() + + if len(paths) > 0: + path = paths[0] + iter = model.get_iter(path) + bpspec, = model.get(iter, 1) + self.bpEntry.set_text(bpspec) + + + + def addBreakpoint(self, file, lineno, cond=None): + + no = self.debugger.setBreakpoint(file, lineno, cond) + if no!=None: + self.addBreakpointToList(no, file, lineno, cond) + else: + dialog = gtk.MessageDialog(None, \ + gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, \ + gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, \ + "Invalid specification!") + dialog.run() + dialog.destroy() + + + def applyConfiguration(self, conf): + for b in conf.breakpoints: + self.addBreakpoint(b["file"], b["lineno"], b["cond"]) + self.updateValues(None, None) + + def fillConfiguration(self, conf): + iter = self.model.get_iter_first() + while iter != None: + spec, = self.model.get(iter, 1) + + #Replacing file by absolute path + file = string.split(spec, ":")[0] + file = self.debugger.toAbsPath(file) + postfile = string.join( string.split(spec,":")[1:], ":") + + conf.parseBreak(file + ":" + postfile ) + iter = self.model.iter_next(iter) + + + + def addBreakpointToList(self, no, file, lineno, cond=None): + + if cond==None: + expr = "%s:%s" % (str(file), str(lineno)) + else: + expr = "%s:%s if %s" % (str(file), str(lineno), str(cond)) + + iter = self.model.get_iter_first() + while iter != None: + newiter = self.model.iter_next(iter) + #Found a expression which is the same --> remove the breakpoint + if (expr,) == self.model.get(iter,1): + self.debugger.delBreakpoint(no) + return + iter = newiter + + #Add the entry to the breakpoint list + iter = self.model.append() + self.model.set(iter, 0, no) + self.model.set(iter, 1, expr) + def addBtnClicked(self, btn): @@ -92,7 +162,8 @@ class BreakpointsFrame (gtk.Frame): bpspec = self.bpEntry.get_text() - rx = re.compile("^[\w\._\-]+:\d+\s*(\sif\s+\S+.*)?$") + bpspec = bpspec.strip() + rx = re.compile("^[\w/\._\-]+:\d+(\s+if\s+\S+.*)?$") #Check if format is correct if not rx.search(bpspec): @@ -105,7 +176,7 @@ class BreakpointsFrame (gtk.Frame): return - ifsplit = string.split(bpspec, "if") + ifsplit = string.split(bpspec, " if ") if len(ifsplit)>1: cond = ifsplit[1].strip() @@ -115,20 +186,7 @@ class BreakpointsFrame (gtk.Frame): pos = ifsplit[0].strip() [file,lineno] = string.split(pos, ":") - pos = self.debugger.setBreakpoint(file, lineno, cond) - - if pos!=None: - iter = self.model.append() - self.model.set(iter, 0, pos) - self.model.set(iter, 1, bpspec) - else: - dialog = gtk.MessageDialog(None, \ - gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, \ - gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, \ - "Invalid specification!") - dialog.run() - dialog.destroy() - return + self.addBreakpoint(file, lineno, cond) @@ -141,7 +199,7 @@ class BreakpointsFrame (gtk.Frame): selection = self.tv.get_selection() model, paths = selection.get_selected_rows() - for path in paths: + for path in reversed(paths): iter = model.get_iter(path) bpno, = self.model.get(iter, 0) self.debugger.delBreakpoint(bpno) @@ -153,10 +211,10 @@ class BreakpointsFrame (gtk.Frame): if not self.debugger.isActive(): return - self.updateValues() + self.updateValues(None, None) - def updateValues(self): + def updateValues(self, status, param): bpnts = self.debugger.getBreakpoints() @@ -169,13 +227,7 @@ class BreakpointsFrame (gtk.Frame): for bp in bpnts: [no, file, lineno, cond] = bp - iter = self.model.append() - self.model.set(iter, 0, no) - - if cond==None: - self.model.set(iter, 1, "%s:%s" % (file, lineno)) - else: - self.model.set(iter, 1, "%s:%s if %s" % (file, lineno, cond)) + self.addBreakpointToList(no, file, lineno, cond)