Ver código fonte

+ Registration of Breakpoint/Watches windows

pierre 26 anos atrás
pai
commit
fe0be42a05
1 arquivos alterados com 125 adições e 30 exclusões
  1. 125 30
      ide/text/fpdebug.pas

+ 125 - 30
ide/text/fpdebug.pas

@@ -100,8 +100,8 @@ type
       function    GetModuleName: string; virtual;
     end;
 
-    PBreakpointListBox = ^TBreakpointListBox;
-    TBreakpointListBox = object(THSListBox)
+    PBreakpointsListBox = ^TBreakpointsListBox;
+    TBreakpointsListBox = object(THSListBox)
       Transparent : boolean;
       NoSelection : boolean;
       MaxWidth    : Sw_integer;
@@ -118,14 +118,14 @@ type
       procedure   ToggleCurrent;
       procedure   Draw; virtual;
       procedure   HandleEvent(var Event: TEvent); virtual;
-      (* constructor Load(var S: TStream);
-      procedure   Store(var S: TStream); *)
+      constructor Load(var S: TStream);
+      procedure   Store(var S: TStream);
       destructor  Done; virtual;
     end;
 
     PBreakpointsWindow = ^TBreakpointsWindow;
     TBreakpointsWindow = object(TDlgWindow)
-      BreakLB : PBreakpointListBox;
+      BreakLB : PBreakpointsListBox;
       constructor Init;
       procedure   AddBreakpoint(ABreakpoint : PBreakpoint);
       procedure   ClearBreakpoints;
@@ -134,6 +134,8 @@ type
       procedure   SizeLimits(var Min, Max: TPoint);virtual;
       procedure   HandleEvent(var Event: TEvent); virtual;
       procedure   Update; virtual;
+      constructor Load(var S: TStream);
+      procedure   Store(var S: TStream);                                                                                                                                                                                                                       
       destructor  Done; virtual;
     end;
 
@@ -189,8 +191,8 @@ type
       (*procedure   ToggleCurrent; *)
       procedure   Draw; virtual;
       procedure   HandleEvent(var Event: TEvent); virtual;
-      (* constructor Load(var S: TStream);
-      procedure   Store(var S: TStream); *)
+      constructor Load(var S: TStream);
+      procedure   Store(var S: TStream);
       destructor  Done; virtual;
     end;
 
@@ -209,6 +211,8 @@ type
     TWatchesWindow = Object(TDlgWindow)
       WLB : PWatchesListBox;
       Constructor Init;
+      constructor Load(var S: TStream);
+      procedure   Store(var S: TStream);                                                                                                                                                                                                                       
       procedure Update; virtual;
       destructor  Done; virtual;
     end;
@@ -233,6 +237,8 @@ procedure DoneBreakpoints;
 procedure InitWatches;
 procedure DoneWatches;
 
+procedure RegisterFPDebugViews;
+
 implementation
 
 uses
@@ -242,6 +248,34 @@ uses
   FPIntf,FPCompile,FPIde,
   Validate,WEditor,WUtils;
 
+const
+  RBreakpointsWindow: TStreamRec = (
+     ObjType: 1701;
+     VmtLink: Ofs(TypeOf(TBreakpointsWindow)^);
+     Load:    @TBreakpointsWindow.Load;
+     Store:   @TBreakpointsWindow.Store
+  );
+
+  RBreakpointsListBox : TStreamRec = (
+     ObjType: 1702;
+     VmtLink: Ofs(TypeOf(TBreakpointsListBox)^);
+     Load:    @TBreakpointsListBox.Load;
+     Store:   @TBreakpointsListBox.Store
+  );
+
+  RWatchesWindow: TStreamRec = (
+     ObjType: 1703;
+     VmtLink: Ofs(TypeOf(TWatchesWindow)^);
+     Load:    @TWatchesWindow.Load;
+     Store:   @TWatchesWindow.Store
+  );
+
+  RWatchesListBox: TStreamRec = (
+     ObjType: 1704;
+     VmtLink: Ofs(TypeOf(TWatchesListBox)^);
+     Load:    @TWatchesListBox.Load;
+     Store:   @TWatchesListBox.Store
+  );
 
 {****************************************************************************
                             TDebugController
@@ -833,17 +867,17 @@ begin
 end;
 
 {****************************************************************************
-                         TBreakpointListBox
+                         TBreakpointsListBox
 ****************************************************************************}
 
-constructor TBreakpointListBox.Init(var Bounds: TRect; AHScrollBar, AVScrollBar: PScrollBar);
+constructor TBreakpointsListBox.Init(var Bounds: TRect; AHScrollBar, AVScrollBar: PScrollBar);
 begin
   inherited Init(Bounds,1,AHScrollBar, AVScrollBar);
   GrowMode:=gfGrowLoX+gfGrowHiX+gfGrowHiY;
   NoSelection:=true;
 end;
 
-function TBreakpointListBox.GetLocalMenu: PMenu;
+function TBreakpointsListBox.GetLocalMenu: PMenu;
 var M: PMenu;
 begin
   if (Owner<>nil) and (Owner^.GetState(sfModal)) then M:=nil else
@@ -857,7 +891,7 @@ begin
   GetLocalMenu:=M;
 end;
 
-procedure TBreakpointListBox.HandleEvent(var Event: TEvent);
+procedure TBreakpointsListBox.HandleEvent(var Event: TEvent);
 var DontClear: boolean;
 begin
   case Event.What of
@@ -906,7 +940,7 @@ begin
   inherited HandleEvent(Event);
 end;
 
-procedure TBreakpointListBox.AddBreakpoint(P: PBreakpointItem);
+procedure TBreakpointsListBox.AddBreakpoint(P: PBreakpointItem);
 var W : integer;
 begin
   if List=nil then New(List, Init(20,20));
@@ -924,7 +958,7 @@ begin
   DrawView;
 end;
 
-(* function TBreakpointListBox.AddModuleName(const Name: string): PString;
+(* function TBreakpointsListBox.AddModuleName(const Name: string): PString;
 var P: PString;
 begin
   if ModuleNames<>nil then
@@ -934,7 +968,7 @@ begin
   AddModuleName:=P;
 end;  *)
 
-function TBreakpointListBox.GetText(Item,MaxLen: Sw_Integer): String;
+function TBreakpointsListBox.GetText(Item,MaxLen: Sw_Integer): String;
 var P: PBreakpointItem;
     S: string;
 begin
@@ -943,7 +977,7 @@ begin
   GetText:=copy(S,1,MaxLen);
 end;
 
-procedure TBreakpointListBox.Clear;
+procedure TBreakpointsListBox.Clear;
 begin
   if assigned(List) then
     Dispose(List, Done);
@@ -955,7 +989,7 @@ begin
   Message(Application,evBroadcast,cmClearLineHighlights,@Self);
 end;
 
-procedure TBreakpointListBox.TrackSource;
+procedure TBreakpointsListBox.TrackSource;
 var W: PSourceWindow;
     P: PBreakpointItem;
     R: TRect;
@@ -989,7 +1023,7 @@ begin
   Desktop^.UnLock;
 end;
 
-procedure TBreakpointListBox.ToggleCurrent;
+procedure TBreakpointsListBox.ToggleCurrent;
 var W: PSourceWindow;
     P: PBreakpointItem;
     b : boolean;
@@ -1017,7 +1051,7 @@ begin
     end;
 end;
 
-procedure TBreakpointListBox.EditCurrent;
+procedure TBreakpointsListBox.EditCurrent;
 var
   P: PBreakpointItem;
 begin
@@ -1028,7 +1062,7 @@ begin
   BreakpointCollection^.Update;
 end;
 
-procedure TBreakpointListBox.DeleteCurrent;
+procedure TBreakpointsListBox.DeleteCurrent;
 var
   P: PBreakpointItem;
 begin
@@ -1040,7 +1074,7 @@ begin
   BreakpointCollection^.Update;
 end;
 
-procedure TBreakpointListBox.EditNew;
+procedure TBreakpointsListBox.EditNew;
 var
   P: PBreakpoint;
 begin
@@ -1054,7 +1088,7 @@ begin
     dispose(P,Done);
 end;
 
-procedure TBreakpointListBox.Draw;
+procedure TBreakpointsListBox.Draw;
 var
   I, J, Item: Sw_Integer;
   NormalColor, SelectedColor, FocusedColor, Color: Word;
@@ -1124,12 +1158,12 @@ begin
   end;
 end;
 
-(* constructor TBreakpointListBox.Load(var S: TStream);
+constructor TBreakpointsListBox.Load(var S: TStream);
 begin
   inherited Load(S);
 end;
 
-procedure TBreakpointListBox.Store(var S: TStream);
+procedure TBreakpointsListBox.Store(var S: TStream);
 var OL: PCollection;
 begin
   OL:=List;
@@ -1143,9 +1177,9 @@ begin
     collection? Pasting here a modified version of TListBox.Store+
     TAdvancedListBox.Store isn't a better solution, since by eventually
     changing the obj-hierarchy you'll always have to modify this, too - BG }
-end;  *)
+end;
 
-destructor TBreakpointListBox.Done;
+destructor TBreakpointsListBox.Done;
 begin
   inherited Done;
   if List<>nil then Dispose(List, Done);
@@ -1208,6 +1242,18 @@ begin
   BreakpointsWindow:=@self;
 end;
 
+constructor TBreakpointsWindow.Load(var S: TStream);
+begin
+  inherited Load(S);
+  GetSubViewPtr(S,BreakLB);
+end;
+
+procedure TBreakpointsWindow.Store(var S: TStream);
+begin
+  inherited Store(S);
+  PutSubViewPtr(S,BreakLB);
+end;
+
 procedure TBreakpointsWindow.AddBreakpoint(ABreakpoint : PBreakpoint);
 begin
   BreakLB^.AddBreakpoint(New(PBreakpointItem, Init(ABreakpoint)));
@@ -1440,11 +1486,15 @@ end;
             p:=StrNew(Debugger^.GetOutput);
           { do not open a messagebox for such errors }
           Debugger^.got_error:=false;
+          q:=nil;
           if assigned(p) and (p[0]='$') then
             q:=StrPos(p,'=');
           if not assigned(q) then
             q:=p;
-          i:=strlen(q);
+          if assigned(q) then
+            i:=strlen(q)
+          else
+            i:=0;
           if (i>0) and (q[i-1]=#10) then
             begin
               q[i-1]:=#0;
@@ -1452,7 +1502,10 @@ end;
             end
           else
             last_removed:=false;
-          current_value:=strnew(q);
+          if assigned(q) then
+            current_value:=strnew(q)
+          else
+            current_value:=strnew('');
           if last_removed then
             q[i-1]:=#10;
           strdispose(p);
@@ -1739,8 +1792,27 @@ begin
   inherited HandleEvent(Event);
 end;
 
-      (* constructor TWatchesListBox.Load(var S: TStream);
-      procedure   TWatchesListBox.Store(var S: TStream); *)
+      constructor TWatchesListBox.Load(var S: TStream);
+        begin
+          inherited Load(S);
+        end;
+
+      procedure   TWatchesListBox.Store(var S: TStream);
+        var OL: PCollection;
+        begin                                                                                                                                                                                                                                                  
+          OL:=List;                                                                                                                                                                                                                                            
+          New(List, Init(1,1));                                                                                                                                                                                                                                
+                                                                                                                                                                                                                                                               
+          inherited Store(S);                                                                                                                                                                                                                                  
+                                                                                                                                                                                                                                                               
+          Dispose(List, Done);                                                                                                                                                                                                                                 
+          List:=OL;                                                                                                                                                                                                                                            
+          { ^^^ nasty trick - has anyone a better idea how to avoid storing the                                                                                                                                                                                
+            collection? Pasting here a modified version of TListBox.Store+                                                                                                                                                                                     
+            TAdvancedListBox.Store isn't a better solution, since by eventually                                                                                                                                                                                
+            changing the obj-hierarchy you'll always have to modify this, too - BG }                                                                                                                                                                           
+        end;
+
       destructor  TWatchesListBox.Done;
         begin
           List:=nil;
@@ -1776,6 +1848,18 @@ end;
       Draw;
     end;
 
+  constructor TWatchesWindow.Load(var S: TStream);
+    begin
+      inherited Load(S);
+      GetSubViewPtr(S,WLB);
+    end;
+
+  procedure TWatchesWindow.Store(var S: TStream);
+    begin
+      inherited Store(S);
+      PutSubViewPtr(S,WLB);
+    end;
+
   Destructor TWatchesWindow.Done;
     begin
       WatchesWindow:=nil;
@@ -1946,11 +2030,22 @@ begin
   WatchesCollection:=nil;
 end;
 
+procedure RegisterFPDebugViews;
+begin
+  RegisterType(RWatchesWindow);
+  RegisterType(RBreakpointsWindow);
+  RegisterType(RWatchesListBox);
+  RegisterType(RBreakpointsListBox);
+end;
+
 end.
 
 {
   $Log$
-  Revision 1.25  1999-08-16 18:25:15  peter
+  Revision 1.26  1999-08-22 22:26:48  pierre
+   + Registration of Breakpoint/Watches windows
+
+  Revision 1.25  1999/08/16 18:25:15  peter
     * Adjusting the selection when the editor didn't contain any line.
     * Reserved word recognition redesigned, but this didn't affect the overall
       syntax highlight speed remarkably (at least not on my Amd-K6/350).