- Fixed bug when bp is set on same addr
[pygdb.git] / BreakpointsFrame.py
index 3216de661c4ed21ae8b55730a2a7003e7bf8bb31..3093fbbe18c047c2e44361dfa75a8d4c560732df 100644 (file)
@@ -11,15 +11,16 @@ 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")
 
                vbox = gtk.VBox(False, 5)
                self.add(vbox)
@@ -92,7 +93,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):
@@ -115,12 +117,16 @@ class BreakpointsFrame (gtk.Frame):
                pos = ifsplit[0].strip()        
                [file,lineno] = string.split(pos, ":")
 
-               pos = self.debugger.setBreakpoint(file, lineno, cond)
+               self.addBreakpoint(file, lineno, cond)
+       
+
+
+       def addBreakpoint(self, file, lineno, cond=None):
+
+               no = 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)
+               if no!=None:
+                       self.addBreakpointToList(no, file, lineno, cond)
                else:
                        dialog = gtk.MessageDialog(None, \
                                gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, \
@@ -128,9 +134,30 @@ class BreakpointsFrame (gtk.Frame):
                                "Invalid specification!") 
                        dialog.run()
                        dialog.destroy()
-                       return
 
 
+       def applyConfiguration(self, conf):
+               for b in conf.breakpoints:
+                       self.addBreakpoint(b["file"], b["lineno"], b["cond"])
+
+       def fillConfiguration(self, conf):
+               iter = self.model.get_iter_first()
+               while iter != None:
+                       spec, = self.model.get(iter, 1)
+                       conf.parseBreak(spec)
+                       iter = self.model.iter_next(iter)
+
+
+
+       def addBreakpointToList(self, no, file, lineno, cond=None):
+               iter = self.model.append()
+               self.model.set(iter, 0, no)
+
+               if cond==None:
+                       self.model.set(iter, 1, "%s:%s" % (str(file), str(lineno)))
+               else:
+                       self.model.set(iter, 1, "%s:%s if %s" % (str(file), str(lineno), str(cond)))
+
 
 
        def delBtnClicked(self, btn):
@@ -153,10 +180,10 @@ class BreakpointsFrame (gtk.Frame):
                if not self.debugger.isActive():
                        return
 
-               self.updateValues()
+               self.updateValues(None)
 
 
-       def updateValues(self):
+       def updateValues(self, pos):
                
                bpnts = self.debugger.getBreakpoints()
 
@@ -169,13 +196,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)