⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 observerbreakpointlist.pas

📁 一个不出名的GBA模拟器
💻 PAS
字号:
//////////////////////////////////////////////////////////////////////
//                                                                  //
// observerBreakpointList.pas: Breakpoint list observer             //
//                                                                  //
// The contents of this file are subject to the Bottled Light       //
// Public License Version 1.0 (the "License"); you may not use this //
// file except in compliance with the License. You may obtain a     //
// copy of the License at http://www.bottledlight.com/BLPL/         //
//                                                                  //
// Software distributed under the License is distributed on an      //
// "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or   //
// implied. See the License for the specific language governing     //
// rights and limitations under the License.                        //
//                                                                  //
// The Original Code is the Mappy VM User Interface, released       //
// April 1st, 2003. The Initial Developer of the Original Code is   //
// Bottled Light, Inc. Portions created by Bottled Light, Inc. are  //
// Copyright (C) 2001-2003 Bottled Light, Inc. All Rights Reserved. //
//                                                                  //
// Author(s):                                                       //
//   Michael Noland (joat), michael@bottledlight.com                //
//                                                                  //
// Changelog:                                                       //
//   1.0: First public release (April 1st, 2003)                    //
//                                                                  //
// Notes:                                                           //
//   None at present.                                               //
//                                                                  //
//////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////
unit observerBreakpointList; /////////////////////////////////////////
//////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////
interface ////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, ComCtrls, cpuObservers, nexus, ImgList;

//////////////////////////////////////////////////////////////////////

type
  TdbgBreakpointList = class(TCpuObserver)
    list: TListView;
    contextMenu: TPopupMenu;
    mEditBreakpoint: TMenuItem;
    mAddBreakpoint: TMenuItem;
    N1: TMenuItem;
    mEnabled: TMenuItem;
    mDeleteBreakpoint: TMenuItem;
    mEnableAllBreakpoints: TMenuItem;
    mDisableAllBreakpoints: TMenuItem;
    mDeleteAllBreakpoints: TMenuItem;
    N2: TMenuItem;
    mViewSource: TMenuItem;
    imageList: TImageList;

    procedure contextMenuPopup(Sender: TObject);

    procedure ToggleEnabled(Sender: TObject);
    procedure EditBreakpoint(Sender: TObject);
    procedure ViewSource(Sender: TObject);

    procedure AddABreakpoint(Sender: TObject);
    procedure DeleteABreakpoint(Sender: TObject);

    procedure EnableAllBreakpoints(Sender: TObject);
    procedure DisableAllBreakpoints(Sender: TObject);
    procedure DeleteAllBreakpoints(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  public
    procedure UpdateObserver; override;
    class function OCaption: string; override;
  end;

//////////////////////////////////////////////////////////////////////

var
  dbgBreakpointList: TdbgBreakpointList;

//////////////////////////////////////////////////////////////////////
implementation ///////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////

uses
  dbgBreakpoints, debugBreakpointProperties;

//////////////////////////////////////////////////////////////////////

{$R *.DFM}

//////////////////////////////////////////////////////////////////////

procedure TdbgBreakpointList.UpdateObserver;
var
  i: integer;
  item: TListItem;
  bp: TBreakpoint;
begin
  list.Items.Clear;
  for i := 0 to breakpoints.Count - 1 do begin
    bp := breakpoints.Items[i] as TBreakpoint;

    // Add the breakpoint info to the list
    item := list.Items.Add;
    item.Data := bp;
//    item.Checked := bp.enabled;
    item.Caption := IntToHex(bp.address, 8);
    item.SubItems.Add(IntToStr(bp.line));
    item.SubItems.Add(bp.condition);

    if bp.breakExecution and (bp.logMessage <> '') then
      item.SubItems.Add('Break, Log "' + bp.logMessage + '"')
    else if bp.breakExecution then
      item.SubItems.Add('Break')
    else if bp.logMessage <> '' then
      item.SubItems.Add('Log "' + bp.logMessage + '"')
    else
      item.SubItems.Add('');

    if bp.enabled then
      item.ImageIndex := 1
    else
      item.ImageIndex := 0;

    item.SubItems.Add(IntToStr(bp.passCount));
  end;
end;

//////////////////////////////////////////////////////////////////////

class function TdbgBreakpointList.OCaption: string;
begin
  Result := 'Breakpoints';
end;

//////////////////////////////////////////////////////////////////////
// Context Menu //////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////

procedure TdbgBreakpointList.contextMenuPopup(Sender: TObject);
var
  itemSelected: boolean;
begin
  itemSelected := list.Selected <> nil;
  mEnabled.visible := itemSelected;
  mEditBreakpoint.visible := itemSelected;
  mViewSource.visible := itemSelected;
  N1.visible := itemSelected;
  mDeleteBreakpoint.visible := itemSelected;
end;

//////////////////////////////////////////////////////////////////////

procedure TdbgBreakpointList.ToggleEnabled(Sender: TObject);
begin
  if list.Selected <> nil then begin
    TBreakpoint(list.Selected.data).enabled := not TBreakpoint(list.Selected.data).enabled;
    UpdateObservers;
  end;
end;

//////////////////////////////////////////////////////////////////////

procedure TdbgBreakpointList.EditBreakpoint(Sender: TObject);
var
  bpProperties: TdbgBreakpointProperties;
begin
  if list.Selected <> nil then begin
    Application.CreateForm(TdbgBreakpointProperties, bpProperties);
    bpProperties.bp := TBreakpoint(list.Selected.data);
    bpProperties.Show;
    UpdateObservers;
  end;
end;

//////////////////////////////////////////////////////////////////////

procedure TdbgBreakpointList.ViewSource(Sender: TObject);
begin
  Beep;
end;

//////////////////////////////////////////////////////////////////////

procedure TdbgBreakpointList.AddABreakpoint(Sender: TObject);
var
  bpProperties: TdbgBreakpointProperties;
begin
  Application.CreateForm(TdbgBreakpointProperties, bpProperties);
  bpProperties.bp := TBreakpoint.Create;
  AddBreakpoint(bpProperties.bp);
  bpProperties.Show;
  UpdateObservers;
end;

//////////////////////////////////////////////////////////////////////

procedure TdbgBreakpointList.DeleteABreakpoint(Sender: TObject);
begin
  if list.Selected <> nil then begin
    RemoveBreakpoint(TBreakpoint(list.Selected.data));
    list.Items.Delete(list.Items.IndexOf(list.Selected));
    UpdateObservers;
  end;
end;

//////////////////////////////////////////////////////////////////////

procedure TdbgBreakpointList.EnableAllBreakpoints(Sender: TObject);
var
  i: integer;
begin
  for i := 0 to breakpoints.Count - 1 do
    TBreakpoint(breakpoints.items[i]).enabled := true;
  UpdateObservers;
end;

//////////////////////////////////////////////////////////////////////

procedure TdbgBreakpointList.DisableAllBreakpoints(Sender: TObject);
var
  i: integer;
begin
  for i := 0 to breakpoints.Count - 1 do
    TBreakpoint(breakpoints.items[i]).enabled := false;
  UpdateObservers;
end;

//////////////////////////////////////////////////////////////////////

procedure TdbgBreakpointList.DeleteAllBreakpoints(Sender: TObject);
begin
  ClearBreakpoints;
  UpdateObservers;
end;

//////////////////////////////////////////////////////////////////////

procedure TdbgBreakpointList.FormCreate(Sender: TObject);
begin
  HelpContext := LinkHelp('breakpoints.html');
  list.DoubleBuffered := true;
end;

//////////////////////////////////////////////////////////////////////

initialization
  RegisterViewer(TdbgBreakpointList);
end.

//////////////////////////////////////////////////////////////////////

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -