MG: fixed speedbuttons numglyphs>1 and started IDE debugging

git-svn-id: trunk@358 -
This commit is contained in:
lazarus 2001-10-18 13:01:33 +00:00
parent 3bda8aaab6
commit 5710c6c271
23 changed files with 813 additions and 894 deletions

View File

@ -21,7 +21,7 @@
} }
unit DBGBreakpoint; unit DBGBreakpoint;
{$mode objfpc} {$mode objfpc}{$H+}
interface interface
@ -69,7 +69,8 @@ type
protected protected
public public
property Enabled: Boolean read FEnabled write SetEnabled; property Enabled: Boolean read FEnabled write SetEnabled;
property Items[const AnIndex: Integer]: TDBGBreakPoint read GetItem write SetItem; default; property Items[const AnIndex: Integer]: TDBGBreakPoint
read GetItem write SetItem; default;
property Name: String read FName write SetName; property Name: String read FName write SetName;
end; end;
@ -79,7 +80,8 @@ type
procedure SetItem(const AnIndex: Integer; const Value: TDBGBreakPointGroup); procedure SetItem(const AnIndex: Integer; const Value: TDBGBreakPointGroup);
protected protected
public public
property Items[const AnIndex: Integer]: TDBGBreakPointGroup read GetItem write SetItem; default; property Items[const AnIndex: Integer]: TDBGBreakPointGroup
read GetItem write SetItem; default;
end; end;
@ -132,6 +134,7 @@ end;
function TDBGBreakPointGroup.GetItem(const AnIndex: Integer): TDBGBreakPoint; function TDBGBreakPointGroup.GetItem(const AnIndex: Integer): TDBGBreakPoint;
begin begin
Result:=nil;
end; end;
procedure TDBGBreakPointGroup.SetEnabled(const AValue: Boolean); procedure TDBGBreakPointGroup.SetEnabled(const AValue: Boolean);
@ -139,7 +142,8 @@ begin
FEnabled := AValue; FEnabled := AValue;
end; end;
procedure TDBGBreakPointGroup.SetItem(const AnIndex: Integer; const AValue: TDBGBreakPoint); procedure TDBGBreakPointGroup.SetItem(const AnIndex: Integer;
const AValue: TDBGBreakPoint);
begin begin
end; end;
@ -150,17 +154,23 @@ end;
{ TDBGBreakPointGroups } { TDBGBreakPointGroups }
function TDBGBreakPointGroups.GetItem(const AnIndex: Integer): TDBGBreakPointGroup; function TDBGBreakPointGroups.GetItem(
const AnIndex: Integer): TDBGBreakPointGroup;
begin begin
Result:=nil;
end; end;
procedure TDBGBreakPointGroups.SetItem(const AnIndex: Integer; const Value: TDBGBreakPointGroup); procedure TDBGBreakPointGroups.SetItem(const AnIndex: Integer;
const Value: TDBGBreakPointGroup);
begin begin
end; end;
end. end.
{ ============================================================================= { =============================================================================
$Log$ $Log$
Revision 1.3 2001/10/18 13:01:31 lazarus
MG: fixed speedbuttons numglyphs>1 and started IDE debugging
Revision 1.2 2001/02/25 16:44:57 lazarus Revision 1.2 2001/02/25 16:44:57 lazarus
MWE: MWE:
+ Added header and footer + Added header and footer

View File

@ -21,7 +21,7 @@
} }
unit DBGWatch; unit DBGWatch;
{$mode objfpc} {$mode objfpc}{$H+}
interface interface
@ -49,7 +49,8 @@ type
procedure SetItem(const AnIndex: Integer; const Value: TDBGWatch); procedure SetItem(const AnIndex: Integer; const Value: TDBGWatch);
protected protected
public public
property Items[const AnIndex: Integer]: TDBGWatch read GetItem write SetItem; default; property Items[const AnIndex: Integer]: TDBGWatch
read GetItem write SetItem; default;
end; end;
implementation implementation
@ -70,6 +71,7 @@ end;
function TDBGWatches.GetItem(const AnIndex: Integer): TDBGWatch; function TDBGWatches.GetItem(const AnIndex: Integer): TDBGWatch;
begin begin
Result:=nil
end; end;
procedure TDBGWatches.SetItem(const AnIndex: Integer; const Value: TDBGWatch); procedure TDBGWatches.SetItem(const AnIndex: Integer; const Value: TDBGWatch);
@ -79,6 +81,9 @@ end;
end. end.
{ ============================================================================= { =============================================================================
$Log$ $Log$
Revision 1.3 2001/10/18 13:01:31 lazarus
MG: fixed speedbuttons numglyphs>1 and started IDE debugging
Revision 1.2 2001/02/25 16:44:57 lazarus Revision 1.2 2001/02/25 16:44:57 lazarus
MWE: MWE:
+ Added header and footer + Added header and footer

View File

@ -22,7 +22,7 @@
} }
unit Debugger; unit Debugger;
{$mode objfpc} {$mode objfpc}{$H+}
interface interface
@ -30,10 +30,12 @@ uses
Classes, DBGWatch, DBGBreakpoint; Classes, DBGWatch, DBGBreakpoint;
type type
TDBGCommandFlags = set of (dcfRun, dcfPause, dcfStop, dcfStepOver, dcfStepInto, dcfRunTo, dcfJumpto, dcfBreak); TDBGCommandFlags = set of (dcfRun, dcfPause, dcfStop, dcfStepOver, dcfStepInto,
dcfRunTo, dcfJumpto, dcfBreak);
TDBGState = (dsStop, dsPause, dsRun, dsError); TDBGState = (dsStop, dsPause, dsRun, dsError);
TDBGCurrentLineEvent = procedure(Sender: TObject; const ASource: String; const ALine: Integer) of object; TDBGCurrentLineEvent = procedure(Sender: TObject; const AFilename: String;
const ALine: Integer) of object;
TDebugger = class TDebugger = class
private private
@ -54,8 +56,8 @@ type
procedure Stop; virtual; // quit debugging procedure Stop; virtual; // quit debugging
procedure StepOver; virtual; procedure StepOver; virtual;
procedure StepInto; virtual; procedure StepInto; virtual;
procedure RunTo(const ASource: String; const ALine: Integer); virtual; // Executes til a certain point procedure RunTo(const AFilename: String; const ALine: Integer); virtual; // Executes til a certain point
procedure JumpTo(const ASource: String; const ALine: Integer); virtual; // No execute, only set exec point procedure JumpTo(const AFilename: String; const ALine: Integer); virtual; // No execute, only set exec point
property BreakPointGroups: TDBGBreakPointGroups read FBreakPointGroups; // list of all breakpoints property BreakPointGroups: TDBGBreakPointGroups read FBreakPointGroups; // list of all breakpoints
property FileName: String read FFileName write SetFileName; // The name of the exe to be debugged property FileName: String read FFileName write SetFileName; // The name of the exe to be debugged
property Flags: TDBGCommandFlags read GetFlags; // All available commands of the debugger property Flags: TDBGCommandFlags read GetFlags; // All available commands of the debugger
@ -77,17 +79,19 @@ end;
function TDebugger.GetDBGState: TDBGState; function TDebugger.GetDBGState: TDBGState;
begin begin
Result:=dsStop;
end; end;
function TDebugger.GetFlags: TDBGCommandFlags; function TDebugger.GetFlags: TDBGCommandFlags;
begin begin
Result:=[dcfStop];
end; end;
procedure TDebugger.Init; procedure TDebugger.Init;
begin begin
end; end;
procedure TDebugger.JumpTo(const ASource: String; const ALine: Integer); procedure TDebugger.JumpTo(const AFilename: String; const ALine: Integer);
begin begin
end; end;
@ -99,7 +103,7 @@ procedure TDebugger.Run;
begin begin
end; end;
procedure TDebugger.RunTo(const ASource: String; const ALine: Integer); procedure TDebugger.RunTo(const AFilename: String; const ALine: Integer);
begin begin
end; end;
@ -122,6 +126,9 @@ end;
end. end.
{ ============================================================================= { =============================================================================
$Log$ $Log$
Revision 1.2 2001/10/18 13:01:31 lazarus
MG: fixed speedbuttons numglyphs>1 and started IDE debugging
Revision 1.1 2001/02/28 22:09:15 lazarus Revision 1.1 2001/02/28 22:09:15 lazarus
MWE: MWE:
* Renamed DBGDebugger to Debugger * Renamed DBGDebugger to Debugger

View File

@ -38,6 +38,15 @@ type
MaxCounter: integer; // for bakCounter MaxCounter: integer; // for bakCounter
SubDirectory: string; SubDirectory: string;
end; end;
TDebuggerType = (dtNone, dtGnuDebugger);
const
DebuggerName : array[TDebuggerType] of string = (
'(None)','GNU debugger (gdb)'
);
type
{ class for storing environment options } { class for storing environment options }
TEnvironmentOptions = class TEnvironmentOptions = class
@ -70,10 +79,12 @@ type
// object inspector // object inspector
FObjectInspectorOptions: TOIOptions; FObjectInspectorOptions: TOIOptions;
// compiler + lazarus files // compiler + debugger + lazarus files
FLazarusDirectory: string; FLazarusDirectory: string;
FCompilerFilename: string; FCompilerFilename: string;
FFPCSourceDirectory: string; FFPCSourceDirectory: string;
FDebuggerFilename: string;
FDebuggerType: TDebuggerType;
FTestBuildDirectory: string; FTestBuildDirectory: string;
// recent files and directories // recent files and directories
@ -142,6 +153,10 @@ type
read FCompilerFilename write FCompilerFilename; read FCompilerFilename write FCompilerFilename;
property FPCSourceDirectory: string property FPCSourceDirectory: string
read FFPCSourceDirectory write FFPCSourceDirectory; read FFPCSourceDirectory write FFPCSourceDirectory;
property DebuggerFilename: string
read FDebuggerFilename write FDebuggerFilename;
property DebuggerType: TDebuggerType
read FDebuggerType write FDebuggerType;
property TestBuildDirectory: string property TestBuildDirectory: string
read FTestBuildDirectory write FTestBuildDirectory; read FTestBuildDirectory write FTestBuildDirectory;
@ -254,6 +269,9 @@ type
CompilerPathComboBox: TComboBox; CompilerPathComboBox: TComboBox;
FPCSourceDirLabel: TLabel; FPCSourceDirLabel: TLabel;
FPCSourceDirComboBox: TComboBox; FPCSourceDirComboBox: TComboBox;
DebuggerPathLabel: TLabel;
DebuggerPathComboBox: TComboBox;
DebuggerTypeComboBox: TComboBox;
TestBuildDirLabel: TLabel; TestBuildDirLabel: TLabel;
TestBuildDirComboBox: TComboBox; TestBuildDirComboBox: TComboBox;
@ -282,9 +300,18 @@ type
var var
EnvironmentOptions: TEnvironmentOptions; EnvironmentOptions: TEnvironmentOptions;
function DebuggerNameToType(const s: string): TDebuggerType;
implementation implementation
function DebuggerNameToType(const s: string): TDebuggerType;
begin
for Result:=Low(TDebuggerType) to High(TDebuggerType) do
if UpperCase(DebuggerName[Result])=uppercase(s) then exit;
Result:=dtNone;
end;
{ TEnvironmentOptions } { TEnvironmentOptions }
@ -329,6 +356,8 @@ begin
FLazarusDirectory:=ExtractFilePath(ParamStr(0)); FLazarusDirectory:=ExtractFilePath(ParamStr(0));
FCompilerFilename:=''; FCompilerFilename:='';
FFPCSourceDirectory:=''; FFPCSourceDirectory:='';
FDebuggerFilename:='';
FDebuggerType:=dtNone;
FTestBuildDirectory:={$ifdef win32}'c:/temp'{$else}'/tmp'{$endif}; FTestBuildDirectory:={$ifdef win32}'c:/temp'{$else}'/tmp'{$endif};
// recent files and directories // recent files and directories
@ -426,6 +455,17 @@ var XMLConfig: TXMLConfig;
if s<>'' then List.Add(s); if s<>'' then List.Add(s);
end; end;
end; end;
procedure LoadDebuggerType(var ADebuggerType: TDebuggerType; Path: string);
var i:integer;
begin
i:=XMLConfig.GetValue(Path+'DebuggerType/Value',5);
case i of
1:ADebuggerType:=dtGnuDebugger;
else
ADebuggerType:=dtNone;
end;
end;
begin begin
try try
@ -487,6 +527,9 @@ begin
'EnvironmentOptions/CompilerFilename/Value',FCompilerFilename); 'EnvironmentOptions/CompilerFilename/Value',FCompilerFilename);
FFPCSourceDirectory:=XMLConfig.GetValue( FFPCSourceDirectory:=XMLConfig.GetValue(
'EnvironmentOptions/FPCSourceDirectory/Value',FFPCSourceDirectory); 'EnvironmentOptions/FPCSourceDirectory/Value',FFPCSourceDirectory);
FDebuggerFilename:=XMLConfig.GetValue(
'EnvironmentOptions/DebuggerFilename/Value',FDebuggerFilename);
LoadDebuggerType(FDebuggerType,'EnvironmentOptions/');
FTestBuildDirectory:=XMLConfig.GetValue( FTestBuildDirectory:=XMLConfig.GetValue(
'EnvironmentOptions/TestBuildDirectory/Value',FTestBuildDirectory); 'EnvironmentOptions/TestBuildDirectory/Value',FTestBuildDirectory);
@ -556,6 +599,17 @@ var XMLConfig: TXMLConfig;
for i:=0 to List.Count-1 do for i:=0 to List.Count-1 do
XMLConfig.SetValue(Path+'Item'+IntToStr(i+1)+'/Value',List[i]); XMLConfig.SetValue(Path+'Item'+IntToStr(i+1)+'/Value',List[i]);
end; end;
procedure SaveDebuggerType(ADebuggerType: TDebuggerType; Path:string);
var i:integer;
begin
case ADebuggerType of
dtNone: i:=0;
dtGnuDebugger: i:=1;
end;
XMLConfig.SetValue(Path+'DebuggerType/Value',i);
end;
begin begin
try try
@ -610,6 +664,9 @@ begin
'EnvironmentOptions/CompilerFilename/Value',FCompilerFilename); 'EnvironmentOptions/CompilerFilename/Value',FCompilerFilename);
XMLConfig.SetValue( XMLConfig.SetValue(
'EnvironmentOptions/FPCSourceDirectory/Value',FFPCSourceDirectory); 'EnvironmentOptions/FPCSourceDirectory/Value',FFPCSourceDirectory);
XMLConfig.SetValue(
'EnvironmentOptions/DebuggerFilename/Value',FDebuggerFilename);
SaveDebuggerType(DebuggerType,'EnvironmentOptions/');
XMLConfig.SetValue( XMLConfig.SetValue(
'EnvironmentOptions/TestBuildDirectory/Value',FTestBuildDirectory); 'EnvironmentOptions/TestBuildDirectory/Value',FTestBuildDirectory);
@ -677,7 +734,7 @@ constructor TEnvironmentOptionsDialog.Create(AOwner:TComponent);
begin begin
inherited Create(AOwner); inherited Create(AOwner);
if LazarusResources.Find(ClassName)=nil then begin if LazarusResources.Find(ClassName)=nil then begin
SetBounds((Screen.Width-480) div 2,(Screen.Height-400) div 2, 485, 405); SetBounds((Screen.Width-480) div 2,(Screen.Height-430) div 2, 485, 435);
Caption:='Environment Options'; Caption:='Environment Options';
NoteBook:=TNoteBook.Create(Self); NoteBook:=TNoteBook.Create(Self);
@ -1329,6 +1386,7 @@ end;
procedure TEnvironmentOptionsDialog.SetupFilesPage; procedure TEnvironmentOptionsDialog.SetupFilesPage;
var MaxX:integer; var MaxX:integer;
ADebuggerType: TDebuggerType;
begin begin
MaxX:=ClientWidth-5; MaxX:=ClientWidth-5;
@ -1496,12 +1554,59 @@ begin
Show; Show;
end; end;
DebuggerPathLabel:=TLabel.Create(Self);
with DebuggerPathLabel do begin
Name:='DebuggerPathLabel';
Parent:=NoteBook.Page[1];
Left:=LazarusDirLabel.Left;
Top:=FPCSourceDirComboBox.Top+FPCSourceDirComboBox.Height;
Width:=FPCSourceDirLabel.Width;
Height:=25;
Caption:='Debugger type and path';
Show;
end;
DebuggerTypeComboBox:=TComboBox.Create(Self);
with DebuggerTypeComboBox do begin
Name:='DebuggerTypeComboBox';
Parent:=NoteBook.Page[1];
Left:=FPCSourceDirLabel.Left;
Top:=DebuggerPathLabel.Top+DebuggerPathLabel.Height+2;
Width:=LazarusDirLabel.Width div 2;
Height:=25;
with Items do begin
BeginUpdate;
for ADebuggerType:=Low(TDebuggerType) to High(TDebuggerType) do
Add(DebuggerName[ADebuggerType]);
EndUpdate;
end;
Show;
end;
DebuggerPathComboBox:=TComboBox.Create(Self);
with DebuggerPathComboBox do begin
Name:='DebuggerPathComboBox';
Parent:=NoteBook.Page[1];
Left:=DebuggerTypeComboBox.Left+DebuggerTypeComboBox.Width+10;
Top:=DebuggerTypeComboBox.Top;
Width:=LazarusDirLabel.Width-DebuggerTypeComboBox.Width-10;
Height:=25;
with Items do begin
BeginUpdate;
Add(DebuggerName[dtNone]);
Add('/opt/fpc/gdb');
EndUpdate;
end;
Show;
end;
TestBuildDirLabel:=TLabel.Create(Self); TestBuildDirLabel:=TLabel.Create(Self);
with TestBuildDirLabel do begin with TestBuildDirLabel do begin
Name:='TestBuildDirLabel'; Name:='TestBuildDirLabel';
Parent:=NoteBook.Page[1]; Parent:=NoteBook.Page[1];
Left:=LazarusDirLabel.Left; Left:=LazarusDirLabel.Left;
Top:=FPCSourceDirComboBox.Top+FPCSourceDirComboBox.Height; Top:=DebuggerTypeComboBox.Top+DebuggerTypeComboBox.Height;
Width:=LazarusDirLabel.Width; Width:=LazarusDirLabel.Width;
Height:=23; Height:=23;
Caption:='Directory for building test projects'; Caption:='Directory for building test projects';
@ -1650,6 +1755,8 @@ begin
SetComboBoxText(LazarusDirComboBox,LazarusDirectory); SetComboBoxText(LazarusDirComboBox,LazarusDirectory);
SetComboBoxText(CompilerPathComboBox,CompilerFilename); SetComboBoxText(CompilerPathComboBox,CompilerFilename);
SetComboBoxText(FPCSourceDirComboBox,FPCSourceDirectory); SetComboBoxText(FPCSourceDirComboBox,FPCSourceDirectory);
SetComboBoxText(DebuggerPathComboBox,DebuggerFilename);
SetComboBoxText(DebuggerTypeComboBox,DebuggerName[DebuggerType]);
SetComboBoxText(TestBuildDirComboBox,TestBuildDirectory); SetComboBoxText(TestBuildDirComboBox,TestBuildDirectory);
// recent files and directories // recent files and directories
@ -1731,6 +1838,8 @@ begin
LazarusDirectory:=LazarusDirComboBox.Text; LazarusDirectory:=LazarusDirComboBox.Text;
CompilerFilename:=CompilerPathComboBox.Text; CompilerFilename:=CompilerPathComboBox.Text;
FPCSourceDirectory:=FPCSourceDirComboBox.Text; FPCSourceDirectory:=FPCSourceDirComboBox.Text;
DebuggerFilename:=DebuggerPathComboBox.Text;
DebuggerType:=DebuggerNameToType(DebuggerTypeComboBox.Text);
TestBuildDirectory:=TestBuildDirComboBox.Text; TestBuildDirectory:=TestBuildDirComboBox.Text;
// recent files and directories // recent files and directories

View File

@ -46,6 +46,9 @@ const
ecClose = ecOpen + 1; ecClose = ecOpen + 1;
ecBuild = ecClose + 1; ecBuild = ecClose + 1;
ecRun = ecBuild + 1; ecRun = ecBuild + 1;
ecPause = ecRun + 1;
ecStepInto = ecPause + 1;
ecStepOver = ecStepInto + 1;
ecJumpToEditor = ecUserFirst + 300; ecJumpToEditor = ecUserFirst + 300;
ecToggleFormUnit = ecUserFirst + 301; ecToggleFormUnit = ecUserFirst + 301;
@ -309,6 +312,9 @@ begin
ecClose: Result:= 'close'; ecClose: Result:= 'close';
ecBuild: Result:= 'build program/project'; ecBuild: Result:= 'build program/project';
ecRun: Result:= 'run program'; ecRun: Result:= 'run program';
ecPause: Result:= 'pause program';
ecStepInto: Result:= 'step into';
ecStepOver: Result:= 'step over';
ecJumpToEditor: Result:='jump to editor'; ecJumpToEditor: Result:='jump to editor';
ecToggleFormUnit: Result:='toggle between form and unit'; ecToggleFormUnit: Result:='toggle between form and unit';
ecGotoEditor1: Result:= 'goto editor 1'; ecGotoEditor1: Result:= 'goto editor 1';
@ -898,6 +904,9 @@ begin
Add('Close',ecClose,VK_F4,[ssCtrl],VK_UNKNOWN,[]); Add('Close',ecClose,VK_F4,[ssCtrl],VK_UNKNOWN,[]);
Add('Build project/program',ecBuild,VK_F9,[ssCtrl],VK_UNKNOWN,[]); Add('Build project/program',ecBuild,VK_F9,[ssCtrl],VK_UNKNOWN,[]);
Add('Run program',ecRun,VK_F9,[],VK_UNKNOWN,[]); Add('Run program',ecRun,VK_F9,[],VK_UNKNOWN,[]);
Add('Pause program',ecPause,VK_UNKNOWN,[],VK_UNKNOWN,[]);
Add('Step into',ecStepInto,VK_F7,[],VK_UNKNOWN,[]);
Add('Step over',ecStepOver,VK_F8,[],VK_UNKNOWN,[]);
Add('Go to source editor 1',ecGotoEditor0,VK_1,[ssAlt],VK_UNKNOWN,[]); Add('Go to source editor 1',ecGotoEditor0,VK_1,[ssAlt],VK_UNKNOWN,[]);
Add('Go to source editor 2',ecGotoEditor0,VK_2,[ssAlt],VK_UNKNOWN,[]); Add('Go to source editor 2',ecGotoEditor0,VK_2,[ssAlt],VK_UNKNOWN,[]);

View File

@ -38,7 +38,7 @@ uses
IDEComp, AbstractFormEditor, FormEditor, CustomFormEditor, ObjectInspector, IDEComp, AbstractFormEditor, FormEditor, CustomFormEditor, ObjectInspector,
PropEdits, ControlSelection, UnitEditor, CompilerOptions, EditorOptions, PropEdits, ControlSelection, UnitEditor, CompilerOptions, EditorOptions,
EnvironmentOpts, TransferMacros, KeyMapping, ProjectOpts, IDEProcs, Process, EnvironmentOpts, TransferMacros, KeyMapping, ProjectOpts, IDEProcs, Process,
UnitInfoDlg; UnitInfoDlg, Debugger;
const const
Version_String = '0.8 alpha'; Version_String = '0.8 alpha';
@ -57,6 +57,9 @@ type
ToggleFormSpeedBtn : TSpeedButton; ToggleFormSpeedBtn : TSpeedButton;
NewFormSpeedBtn : TSpeedButton; NewFormSpeedBtn : TSpeedButton;
RunSpeedButton : TSpeedButton; RunSpeedButton : TSpeedButton;
PauseSpeedButton : TSpeedButton;
StepIntoSpeedButton : TSpeedButton;
StepOverSpeedButton : TSpeedButton;
OpenFilePopUpMenu : TPopupMenu; OpenFilePopUpMenu : TPopupMenu;
Toolbutton1 : TToolButton; Toolbutton1 : TToolButton;
Toolbutton2 : TToolButton; Toolbutton2 : TToolButton;
@ -99,6 +102,11 @@ type
itmProjectViewSource: TMenuItem; itmProjectViewSource: TMenuItem;
itmProjectBuild: TMenuItem; itmProjectBuild: TMenuItem;
itmProjectRun: TMenuItem; itmProjectRun: TMenuItem;
itmProjectPause: TMenuItem;
itmProjectStepInto: TMenuItem;
itmProjectStepOver: TMenuItem;
itmProjectRunToCursor: TMenuItem;
itmProjectStop: TMenuItem;
itmProjectOptions: TMenuItem; itmProjectOptions: TMenuItem;
itmProjectCompilerSettings: TMenuItem; itmProjectCompilerSettings: TMenuItem;
@ -162,6 +170,11 @@ type
procedure mnuViewProjectSourceClicked(Sender : TObject); procedure mnuViewProjectSourceClicked(Sender : TObject);
procedure mnuBuildProjectClicked(Sender : TObject); procedure mnuBuildProjectClicked(Sender : TObject);
procedure mnuRunProjectClicked(Sender : TObject); procedure mnuRunProjectClicked(Sender : TObject);
procedure mnuPauseProjectClicked(Sender : TObject);
procedure mnuStepIntoProjectClicked(Sender : TObject);
procedure mnuStepOverProjectClicked(Sender : TObject);
procedure mnuRunToCursorProjectClicked(Sender : TObject);
procedure mnuStopProjectClicked(Sender : TObject);
procedure mnuProjectCompilerSettingsClicked(Sender : TObject); procedure mnuProjectCompilerSettingsClicked(Sender : TObject);
procedure mnuProjectOptionsClicked(Sender : TObject); procedure mnuProjectOptionsClicked(Sender : TObject);
@ -203,6 +216,11 @@ type
procedure OnBeforeCodeToolBossApplyChanges(Manager: TCodeToolManager; procedure OnBeforeCodeToolBossApplyChanges(Manager: TCodeToolManager;
var Abort: boolean); var Abort: boolean);
procedure OnAfterCodeToolBossApplyChanges(Manager: TCodeToolManager); procedure OnAfterCodeToolBossApplyChanges(Manager: TCodeToolManager);
// Debugger Events
procedure OnDebuggerChangeState(Sender: TObject);
procedure OnDebuggerCurrentLine(Sender: TObject; const AFilename: String;
const ALine: Integer);
private private
FCodeLastActivated : Boolean; //used for toggling between code and forms FCodeLastActivated : Boolean; //used for toggling between code and forms
FSelectedComponent : TRegisteredComponent; FSelectedComponent : TRegisteredComponent;
@ -210,6 +228,7 @@ type
MacroList: TTransferMacroList; MacroList: TTransferMacroList;
FMessagesViewBoundsRectValid: boolean; FMessagesViewBoundsRectValid: boolean;
FOpenEditorsOnCodeToolChange: boolean; FOpenEditorsOnCodeToolChange: boolean;
TheDebugger: TDebugger;
Function CreateSeperator : TMenuItem; Function CreateSeperator : TMenuItem;
Procedure SetDefaultsForForm(aForm : TCustomForm); Procedure SetDefaultsForForm(aForm : TCustomForm);
@ -248,6 +267,11 @@ type
function DoRemoveFromProjectDialog: TModalResult; function DoRemoveFromProjectDialog: TModalResult;
function DoBuildProject: TModalResult; function DoBuildProject: TModalResult;
function DoRunProject: TModalResult; function DoRunProject: TModalResult;
function DoPauseProject: TModalResult;
function DoStepIntoProject: TModalResult;
function DoStepOverProject: TModalResult;
function DoRunToCursor: TModalResult;
function DoStopProject: TModalResult;
function SomethingOfProjectIsModified: boolean; function SomethingOfProjectIsModified: boolean;
function DoCreateProjectForProgram(ProgramBuf: TCodeBuffer): TModalResult; function DoCreateProjectForProgram(ProgramBuf: TCodeBuffer): TModalResult;
function DoSaveProjectToTestDirectory: TModalResult; function DoSaveProjectToTestDirectory: TModalResult;
@ -276,10 +300,12 @@ type
FocusEditor: boolean): boolean; FocusEditor: boolean): boolean;
procedure DoShowMessagesView; procedure DoShowMessagesView;
function GetTestProjectFilename: string; function GetTestProjectFilename: string;
function GetTestUnitFilename(AnUnitInfo: TUnitInfo): string;
procedure SaveSourceEditorChangesToCodeCache; procedure SaveSourceEditorChangesToCodeCache;
procedure ApplyCodeToolChanges; procedure ApplyCodeToolChanges;
procedure DoJumpToProcedureSection; procedure DoJumpToProcedureSection;
procedure DoCompleteCodeAtCursor; procedure DoCompleteCodeAtCursor;
function DoInitDebugger: TModalResult;
procedure LoadMainMenu; procedure LoadMainMenu;
procedure LoadSpeedbuttons; procedure LoadSpeedbuttons;
@ -432,7 +458,7 @@ begin
Parent := Self; Parent := Self;
Name := 'ComponentNotebook'; Name := 'ComponentNotebook';
// Align := alBottom; // Align := alBottom;
Left := RunSpeedButton.Left + RunSpeedButton.Width + 4; Left := ToggleFormSpeedBtn.Left + ToggleFormSpeedBtn.Width + 4;
// Top :=50+ 2; // Top :=50+ 2;
Top := 0; Top := 0;
Width := Self.ClientWidth - Left; Width := Self.ClientWidth - Left;
@ -736,14 +762,20 @@ begin
ButtonLeft := n+12+1; ButtonLeft := n+12+1;
SaveSpeedBtn := CreateButton('SaveSpeedBtn' , 'btn_save' , 1, ButtonLeft, ButtonTop, [mfLeft], @mnuSaveClicked); SaveSpeedBtn := CreateButton('SaveSpeedBtn' , 'btn_save' , 1, ButtonLeft, ButtonTop, [mfLeft], @mnuSaveClicked);
SaveAllSpeedBtn := CreateButton('SaveAllSpeedBtn' , 'btn_saveall' , 1, ButtonLeft, ButtonTop, [mfLeft, mfTop], @mnuSaveAllClicked); SaveAllSpeedBtn := CreateButton('SaveAllSpeedBtn' , 'btn_saveall' , 1, ButtonLeft, ButtonTop, [mfLeft], @mnuSaveAllClicked);
// new row NewFormSpeedBtn := CreateButton('NewFormSpeedBtn' , 'btn_newform' , 1, ButtonLeft, ButtonTop, [mfLeft], @mnuNewFormClicked);
ToggleFormSpeedBtn := CreateButton('ToggleFormSpeedBtn' , 'btn_toggleform', 1, ButtonLeft, ButtonTop, [mfLeft, mfTop], @mnuToggleFormUnitCLicked);
// new row
ButtonLeft := 1; ButtonLeft := 1;
ViewUnitsSpeedBtn := CreateButton('ViewUnitsSpeedBtn' , 'btn_viewunits' , 1, ButtonLeft, ButtonTop, [mfLeft], @mnuViewUnitsClicked); ViewUnitsSpeedBtn := CreateButton('ViewUnitsSpeedBtn' , 'btn_viewunits' , 1, ButtonLeft, ButtonTop, [mfLeft], @mnuViewUnitsClicked);
ViewFormsSpeedBtn := CreateButton('ViewFormsSpeedBtn' , 'btn_viewforms' , 1, ButtonLeft, ButtonTop, [mfLeft], @mnuViewFormsClicked); ViewFormsSpeedBtn := CreateButton('ViewFormsSpeedBtn' , 'btn_viewforms' , 1, ButtonLeft, ButtonTop, [mfLeft], @mnuViewFormsClicked);
ToggleFormSpeedBtn := CreateButton('ToggleFormSpeedBtn' , 'btn_toggleform', 1, ButtonLeft, ButtonTop, [mfLeft], @mnuToggleFormUnitCLicked); inc(ButtonLeft,12);
NewFormSpeedBtn := CreateButton('NewFormSpeedBtn' , 'btn_newform' , 1, ButtonLeft, ButtonTop, [mfLeft], @mnuNewFormClicked); RunSpeedButton := CreateButton('RunSpeedButton' , 'btn_run' , 2, ButtonLeft, ButtonTop, [mfLeft], @mnuRunProjectClicked);
RunSpeedButton := CreateButton('RunSpeedButton' , 'btn_run' , 1, ButtonLeft, ButtonTop, [mfLeft, mfTop], @mnuRunProjectClicked); PauseSpeedButton := CreateButton('PauseSpeedButton' , 'btn_pause' , 2, ButtonLeft, ButtonTop, [mfLeft], @mnuPauseProjectClicked);
PauseSpeedButton.Enabled:=false;
StepIntoSpeedButton := CreateButton('StepIntoSpeedButton' , 'btn_stepinto' , 1, ButtonLeft, ButtonTop, [mfLeft], @mnuStepIntoProjectClicked);
StepOverSpeedButton := CreateButton('StepOverpeedButton' , 'btn_stepover' , 1, ButtonLeft, ButtonTop, [mfLeft, mfTop], @mnuStepOverProjectClicked);
// pnlSpeedButtons.Width := ButtonLeft; // pnlSpeedButtons.Width := ButtonLeft;
// pnlSpeedButtons.Height := ButtonTop; // pnlSpeedButtons.Height := ButtonTop;
@ -1068,6 +1100,37 @@ begin
itmProjectRun.OnClick := @mnuRunProjectClicked; itmProjectRun.OnClick := @mnuRunProjectClicked;
mnuProject.Add(itmProjectRun); mnuProject.Add(itmProjectRun);
itmProjectPause := TMenuItem.Create(Self);
itmProjectPause.Name:='itmProjectPause';
itmProjectPause.Caption := 'Pause';
itmProjectPause.OnClick := @mnuPauseProjectClicked;
itmProjectPause.Enabled := false;
mnuProject.Add(itmProjectPause);
itmProjectStepInto := TMenuItem.Create(Self);
itmProjectStepInto.Name:='itmProjectStepInto';
itmProjectStepInto.Caption := 'Step into';
itmProjectStepInto.OnClick := @mnuStepIntoProjectClicked;
mnuProject.Add(itmProjectStepInto);
itmProjectStepOver := TMenuItem.Create(Self);
itmProjectStepOver.Name:='itmProjectStepOver';
itmProjectStepOver.Caption := 'Step over';
itmProjectStepOver.OnClick := @mnuStepOverProjectClicked;
mnuProject.Add(itmProjectStepOver);
itmProjectRunToCursor := TMenuItem.Create(Self);
itmProjectRunToCursor.Name:='itmProjectRunToCursor';
itmProjectRunToCursor.Caption := 'Run to cursor';
itmProjectRunToCursor.OnClick := @mnuRunToCursorProjectClicked;
mnuProject.Add(itmProjectRunToCursor);
itmProjectStop := TMenuItem.Create(Self);
itmProjectStop.Name:='itmProjectStop';
itmProjectStop.Caption := 'Stop';
itmProjectStop.OnClick := @mnuStopProjectClicked;
mnuProject.Add(itmProjectStop);
mnuProject.Add(CreateSeperator); mnuProject.Add(CreateSeperator);
itmProjectCompilerSettings := TMenuItem.Create(Self); itmProjectCompilerSettings := TMenuItem.Create(Self);
@ -1622,6 +1685,31 @@ begin
DoRunProject; DoRunProject;
end; end;
Procedure TMainIDE.mnuPauseProjectClicked(Sender : TObject);
begin
DoPauseProject;
end;
Procedure TMainIDE.mnuStepIntoProjectClicked(Sender : TObject);
begin
DoStepIntoProject;
end;
Procedure TMainIDE.mnuStepOverProjectClicked(Sender : TObject);
begin
DoStepOverProject;
end;
Procedure TMainIDE.mnuRunToCursorProjectClicked(Sender : TObject);
begin
DoRunToCursor;
end;
Procedure TMainIDE.mnuStopProjectClicked(Sender : TObject);
begin
DoStopProject;
end;
procedure TMainIDE.mnuProjectCompilerSettingsClicked(Sender : TObject); procedure TMainIDE.mnuProjectCompilerSettingsClicked(Sender : TObject);
var frmCompilerOptions:TfrmCompilerOptions; var frmCompilerOptions:TfrmCompilerOptions;
begin begin
@ -1640,7 +1728,7 @@ end;
procedure TMainIDE.mnuProjectOptionsClicked(Sender : TObject); procedure TMainIDE.mnuProjectOptionsClicked(Sender : TObject);
begin begin
if ShowProjectOptionsDialog(Project)=mrOk then begin if ShowProjectOptionsDialog(Project)=mrOk then begin
// UpdateMainUnitSrcEdit;
end; end;
end; end;
@ -1664,6 +1752,7 @@ procedure TMainIDE.LoadDesktopSettings(
begin begin
with TheEnvironmentOptions do begin with TheEnvironmentOptions do begin
if WindowPositionsValid then begin if WindowPositionsValid then begin
// set window positions
BoundsRect:=MainWindowBounds; BoundsRect:=MainWindowBounds;
SourceNoteBook.BoundsRect:=SourceEditorBounds; SourceNoteBook.BoundsRect:=SourceEditorBounds;
if MessagesViewBoundsValid then begin if MessagesViewBoundsValid then begin
@ -1673,6 +1762,13 @@ begin
ObjectInspectorOptions.AssignTo(ObjectInspector1); ObjectInspectorOptions.AssignTo(ObjectInspector1);
end; end;
end; end;
// set global variables
with CodeToolBoss.GlobalValues do begin
Variables[ExternalMacroStart+'LazarusSrcDir']:=
TheEnvironmentOptions.LazarusDirectory;
Variables[ExternalMacroStart+'FPCSrcDir']:=
TheEnvironmentOptions.FPCSourceDirectory;
end;
end; end;
procedure TMainIDE.OnLoadEnvironmentSettings(Sender: TObject; procedure TMainIDE.OnLoadEnvironmentSettings(Sender: TObject;
@ -1827,7 +1923,6 @@ CheckHeap('TMainIDE.DoNewEditorUnit L '+IntToStr(GetMem_Cnt));
PropertyEditorHook1.LookupRoot := TForm(CInterface.Control); PropertyEditorHook1.LookupRoot := TForm(CInterface.Control);
TDesigner(TempForm.Designer).SelectOnlyThisComponent(TempForm); TDesigner(TempForm.Designer).SelectOnlyThisComponent(TempForm);
end; end;
//UpdateMainUnitSrcEdit;
FCodeLastActivated:=not (NewUnitType in [nuForm]); FCodeLastActivated:=not (NewUnitType in [nuForm]);
writeln('TMainIDE.DoNewUnit end'); writeln('TMainIDE.DoNewUnit end');
@ -1842,7 +1937,7 @@ var ActiveSrcEdit:TSourceEditor;
ActiveUnitInfo:TUnitInfo; ActiveUnitInfo:TUnitInfo;
SaveDialog:TSaveDialog; SaveDialog:TSaveDialog;
NewUnitName,NewFilename,NewPageName:string; NewUnitName,NewFilename,NewPageName:string;
AText,ACaption,CompResourceCode,s,TestFilename: string; AText,ACaption,CompResourceCode,TestFilename: string;
MemStream,BinCompStream,TxtCompStream:TMemoryStream; MemStream,BinCompStream,TxtCompStream:TMemoryStream;
Driver: TAbstractObjectWriter; Driver: TAbstractObjectWriter;
Writer:TWriter; Writer:TWriter;
@ -1975,20 +2070,13 @@ writeln('TMainIDE.DoSaveEditorUnit C ',ResourceCode<>nil);
end; end;
end else begin end else begin
// save source to test directory // save source to test directory
s:=EnvironmentOptions.TestBuildDirectory; TestFilename:=GetTestUnitFilename(ActiveUnitInfo);
if s='' then exit;
if s[length(s)]<>OSDirSeparator then s:=s+OSDirSeparator;
if ActiveUnitInfo.UnitName<>'' then begin
TestFilename:=s+lowercase(ActiveUnitInfo.UnitName)+'.pas';
end else if (Project.MainUnit>=0)
and (Project.Units[Project.MainUnit]=ActiveUnitInfo) then begin
TestFilename:=GetTestProjectFilename;
end;
if TestFilename<>'' then begin if TestFilename<>'' then begin
Result:=ActiveUnitInfo.WriteUnitSourceToFile(TestFilename); Result:=ActiveUnitInfo.WriteUnitSourceToFile(TestFilename);
if Result<>mrOk then exit; if Result<>mrOk then exit;
Result:=mrCancel; Result:=mrCancel;
end; end else
exit;
end; end;
{$IFDEF IDE_DEBUG} {$IFDEF IDE_DEBUG}
@ -2170,7 +2258,6 @@ writeln('TMainIDE.DoCloseEditorUnit A PageIndex=',PageIndex);
i:=Project.IndexOf(ActiveUnitInfo); i:=Project.IndexOf(ActiveUnitInfo);
if (i<>Project.MainUnit) and (ActiveUnitInfo.Source.IsVirtual) then begin if (i<>Project.MainUnit) and (ActiveUnitInfo.Source.IsVirtual) then begin
Project.RemoveUnit(i); Project.RemoveUnit(i);
//UpdateMainUnitSrcEdit;
end; end;
writeln('TMainIDE.DoCloseEditorUnit end'); writeln('TMainIDE.DoCloseEditorUnit end');
Result:=mrOk; Result:=mrOk;
@ -2752,7 +2839,6 @@ writeln('TMainIDE.DoSaveProject A SaveAs=',SaveAs,' SaveToTestDir=',SaveToTestDi
if MainUnitInfo<>nil then MainUnitInfo.Modified:=false; if MainUnitInfo<>nil then MainUnitInfo.Modified:=false;
if MainUnitSrcEdit<>nil then MainUnitSrcEdit.Modified:=false; if MainUnitSrcEdit<>nil then MainUnitSrcEdit.Modified:=false;
end; end;
//UpdateMainUnitSrcEdit;
UpdateCaption; UpdateCaption;
end; end;
@ -3043,7 +3129,6 @@ Begin
if (AnUnitInfo.FormName<>'') then if (AnUnitInfo.FormName<>'') then
Project.RemoveCreateFormFromProjectFile( Project.RemoveCreateFormFromProjectFile(
'T'+AnUnitInfo.FormName,AnUnitInfo.FormName); 'T'+AnUnitInfo.FormName,AnUnitInfo.FormName);
//UpdateMainUnitSrcEdit;
end; end;
end; end;
end; end;
@ -3125,46 +3210,222 @@ function TMainIDE.DoRunProject: TModalResult;
// -connect program to debugger // -connect program to debugger
var var
TheProcess : TProcess; TheProcess : TProcess;
ProgramFilename, Ext, AText : String; ProgramFilename, AText : String;
MainUnitInfo: TUnitInfo;
begin begin
Result:=mrCancel; Result:=mrCancel;
writeln('[TMainIDE.DoRunProject] A'); writeln('[TMainIDE.DoRunProject] A');
if ToolStatus<>itNone then begin if not (ToolStatus in [itNone,itDebugger]) then begin
Result:=mrAbort; Result:=mrAbort;
exit; exit;
end; end;
if not (Project.ProjectType in [ptProgram, ptApplication, ptCustomProgram]) if not (Project.ProjectType in [ptProgram, ptApplication, ptCustomProgram])
then exit; or (Project.MainUnit<0) then
exit;
ProgramFilename:=Project.ProjectFile; MainUnitInfo:=Project.Units[Project.MainUnit];
if ProgramFilename='' then ProgramFilename:=GetTestProjectFilename; ProgramFilename:=ChangeFileExt(MainUnitInfo.Filename,Project.TargetFileExt);
Ext:=ExtractFileExt(ProgramFilename); if MainUnitInfo.IsVirtual then ProgramFilename:=GetTestProjectFilename;
ProgramFilename:=LowerCase(copy(ProgramFilename,1,
length(ProgramFilename)-length(Ext)));
{$ifdef win32}
ProgramFilename:=ProgramFilename+'.exe';
{$endif}
if not FileExists(ProgramFilename) then begin if not FileExists(ProgramFilename) then begin
AText:='No program file "'+ProgramFilename+'" found!'; AText:='No program file "'+ProgramFilename+'" found!';
MessageDlg('File not found',AText,mterror,[mbok],0); MessageDlg('File not found',AText,mtError,[mbCancel],0);
exit; exit;
end; end;
try case EnvironmentOptions.DebuggerType of
TheProcess:=TProcess.Create(ProgramFilename, dtGnuDebugger:
[poRunSuspended,poUsePipes,poNoConsole]); begin
TheProcess.Execute; if TheDebugger=nil then begin
except Result:=DoInitDebugger;
on e: Exception do begin if Result<>mrOk then exit;
AText:='Error running program "'+ProgramFilename+'": '+e.Message; Result:=mrCancel;
MessageDlg(AText,mterror,[mbok], 0); end;
end; ToolStatus:=itDebugger;
end; TheDebugger.Run;
end;
else
begin
try
TheProcess:=TProcess.Create(ProgramFilename,
[poRunSuspended,poUsePipes,poNoConsole]);
TheProcess.Execute;
except
on e: Exception do begin
AText:='Error running program "'+ProgramFilename+'": '+e.Message;
MessageDlg(AText,mterror,[mbok], 0);
end;
end;
end;
end;
Result:=mrOk; Result:=mrOk;
writeln('[TMainIDE.DoRunProject] END'); writeln('[TMainIDE.DoRunProject] END');
end; end;
function TMainIDE.DoPauseProject: TModalResult;
begin
Result:=mrCancel;
if (ToolStatus<>itDebugger) or (TheDebugger=nil) then exit;
TheDebugger.Pause;
Result:=mrOk;
end;
function TMainIDE.DoStepIntoProject: TModalResult;
begin
Result:=mrCancel;
if ToolStatus=itNone then begin
Result:=DoInitDebugger;
if Result<>mrOk then exit;
Result:=mrCancel;
ToolStatus:=itDebugger;
end;
if (ToolStatus<>itDebugger) or (TheDebugger=nil) then
exit
else begin
TheDebugger.StepInto;
Result:=mrOk;
end;
end;
function TMainIDE.DoStepOverProject: TModalResult;
begin
Result:=mrCancel;
if ToolStatus=itNone then begin
Result:=DoInitDebugger;
if Result<>mrOk then exit;
Result:=mrCancel;
ToolStatus:=itDebugger;
end;
if (ToolStatus<>itDebugger) or (TheDebugger=nil) then
exit
else begin
TheDebugger.StepOver;
Result:=mrOk;
end;
end;
function TMainIDE.DoStopProject: TModalResult;
begin
Result:=mrCancel;
if (ToolStatus<>itDebugger) or (TheDebugger=nil) then exit;
TheDebugger.Stop;
Result:=mrOk;
end;
function TMainIDE.DoRunToCursor: TModalResult;
var ActiveSrcEdit: TSourceEditor;
ActiveUnitInfo: TUnitInfo;
UnitFilename: string;
begin
Result:=mrCancel;
if ToolStatus=itNone then begin
Result:=DoInitDebugger;
if Result<>mrOk then exit;
Result:=mrCancel;
ToolStatus:=itDebugger;
end;
if ToolStatus<>itDebugger then exit;
GetCurrentUnit(ActiveSrcEdit,ActiveUnitInfo);
if (ActiveSrcEdit=nil) or (ActiveUnitInfo=nil) then begin
MessageDlg('Run to failed','Please open a unit before run.',mtError,
[mbCancel],0);
exit;
end;
if not ActiveUnitInfo.Source.IsVirtual then
UnitFilename:=ActiveUnitInfo.Filename
else
UnitFilename:=GetTestUnitFilename(ActiveUnitInfo);
TheDebugger.RunTo(UnitFilename,ActiveSrcEdit.EditorComponent.CaretY);
end;
function TMainIDE.DoInitDebugger: TModalResult;
var ProgramFilename: string;
MainUnitInfo: TUnitInfo;
begin
Result:=mrCancel;
if Project.MainUnit<0 then exit;
case EnvironmentOptions.DebuggerType of
dtGnuDebugger:
begin
{ ToDo: GnuDebugger
if (TheDebugger<>nil) and (not (TheDebugger is TGnuDebugger)) then begin
TheDebugger.Free;
TheDebugger:=nil;
end;
TheDebugger:=TGnuDebugger.Create;}
end;
else
begin
TheDebugger.Free;
TheDebugger:=nil;
exit;
end;
end;
MainUnitInfo:=Project.Units[Project.MainUnit];
if MainUnitInfo.IsVirtual then
ProgramFilename:=GetTestProjectFilename
else
ProgramFilename:=ChangeFileExt(MainUnitInfo.Filename,Project.TargetFileExt);
TheDebugger.Filename:=ProgramFilename;
TheDebugger.OnState:=@OnDebuggerChangeState;
TheDebugger.OnCurrent:=@OnDebuggerCurrentLine;
// property BreakPointGroups: TDBGBreakPointGroups read FBreakPointGroups; // list of all breakpoints
// property Watches: TDBGWatches read FWatches; // list of all watches localvars etc
Result:=mrOk;
end;
procedure TMainIDE.OnDebuggerChangeState(Sender: TObject);
begin
if (Sender<>TheDebugger) or (Sender=nil) then exit;
RunSpeedButton.Enabled:=(TheDebugger.State in [dsStop,dsPause,dsError]);
PauseSpeedButton.Enabled:=(TheDebugger.State in [dsRun]);
itmProjectRun.Enabled:=RunSpeedButton.Enabled;
itmProjectPause.Enabled:=PauseSpeedButton.Enabled;
case TheDebugger.State of
dsStop:
begin
// program stopped -> end debugging session
TheDebugger.Free;
TheDebugger:=nil;
ToolStatus:=itNone;
end;
dsPause:
begin
// program paused
ToolStatus:=itDebugger;
end;
dsRun:
begin
// program is running
ToolStatus:=itDebugger;
end;
dsError:
begin
// ???
ToolStatus:=itDebugger;
end;
end;
end;
procedure TMainIDE.OnDebuggerCurrentLine(Sender: TObject;
const AFilename: String; const ALine: Integer);
// debugger paused program due to pause or error
// -> show the current execution line in editor
var ActiveSrcEdit: TSourceEditor;
begin
if (Sender<>TheDebugger) or (Sender=nil) then exit;
if DoOpenEditorFile(AFilename,false)<>mrOk then exit;
ActiveSrcEdit:=SourceNoteBook.GetActiveSE;
if ActiveSrcEdit=nil then exit;
ActiveSrcEdit.EditorComponent.CaretXY:=Point(1,ALine);
ActiveSrcEdit.EditorComponent.TopLine:=
ALine-(ActiveSrcEdit.EditorComponent.LinesInWindow div 2);
ActiveSrcEdit.ErrorLine:=ALine;
end;
function TMainIDE.SomethingOfProjectIsModified: boolean; function TMainIDE.SomethingOfProjectIsModified: boolean;
begin begin
Result:=(Project<>nil) Result:=(Project<>nil)
@ -3649,13 +3910,27 @@ var TestDir: string;
begin begin
Result:=''; Result:='';
if (Project.MainUnit<0) then exit; if (Project.MainUnit<0) then exit;
Result:=ExtractFilename(Project.Units[Project.MainUnit].Source.Filename);
if (Result='') then exit;
TestDir:=EnvironmentOptions.TestBuildDirectory; TestDir:=EnvironmentOptions.TestBuildDirectory;
if (TestDir='') then exit; if (TestDir='') then exit;
if TestDir[length(TestDir)]<>OSDirSeparator then if TestDir[length(TestDir)]<>OSDirSeparator then
TestDir:=TestDir+OSDirSeparator; TestDir:=TestDir+OSDirSeparator;
Result:=CodeToolBoss.GetSourceType(Project.Units[Project.MainUnit].Source); Result:=TestDir+Result;
if (Result='') then exit; end;
Result:=TestDir+Result+'.lpr';
function TMainIDE.GetTestUnitFilename(AnUnitInfo: TUnitInfo): string;
var TestDir: string;
begin
Result:='';
if AnUnitInfo=nil then exit;
TestDir:=EnvironmentOptions.TestBuildDirectory;
if (TestDir='') then exit;
if TestDir[length(TestDir)]<>OSDirSeparator then
TestDir:=TestDir+OSDirSeparator;
Result:=ExtractFilename(AnUnitInfo.Filename);
if Result='' then exit;
Result:=TestDir+Result;
end; end;
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
@ -4020,6 +4295,9 @@ end.
{ ============================================================================= { =============================================================================
$Log$ $Log$
Revision 1.124 2001/10/18 13:01:30 lazarus
MG: fixed speedbuttons numglyphs>1 and started IDE debugging
Revision 1.123 2001/10/17 13:43:15 lazarus Revision 1.123 2001/10/17 13:43:15 lazarus
MG: added find previous to source editor MG: added find previous to source editor

View File

@ -309,6 +309,7 @@ const
'.pas', '.pas', '.pas', '.pas' '.pas', '.pas', '.pas', '.pas'
); );
DefaultTargetFileExt : string = {$IFDEF win32}'.exe'{$ELSE}''{$ENDIF};
function ProjectTypeNameToType(const s:string): TProjectType; function ProjectTypeNameToType(const s:string): TProjectType;
@ -869,7 +870,7 @@ begin
fModified := false; fModified := false;
fOutputDirectory := '.'; fOutputDirectory := '.';
fProjectFile := ''; fProjectFile := '';
fTargetFileExt := ''; fTargetFileExt := DefaultTargetFileExt;
fTitle := ''; fTitle := '';
fUnitList := TList.Create; // list of TUnitInfo fUnitList := TList.Create; // list of TUnitInfo
fUnitOutputDirectory := '.'; fUnitOutputDirectory := '.';
@ -1024,7 +1025,7 @@ begin
'ProjectOptions/General/ActiveEditorIndexAtStart/Value', -1); 'ProjectOptions/General/ActiveEditorIndexAtStart/Value', -1);
IconPath := xmlcfg.GetValue('ProjectOptions/General/IconPath/Value', './'); IconPath := xmlcfg.GetValue('ProjectOptions/General/IconPath/Value', './');
TargetFileExt := xmlcfg.GetValue( TargetFileExt := xmlcfg.GetValue(
'ProjectOptions/General/TargetFileExt/Value', ''); 'ProjectOptions/General/TargetFileExt/Value', DefaultTargetFileExt);
Title := xmlcfg.GetValue('ProjectOptions/General/Title/Value', ''); Title := xmlcfg.GetValue('ProjectOptions/General/Title/Value', '');
OutputDirectory := xmlcfg.GetValue( OutputDirectory := xmlcfg.GetValue(
'ProjectOptions/General/OutputDirectory/Value', '.'); 'ProjectOptions/General/OutputDirectory/Value', '.');
@ -1132,7 +1133,7 @@ begin
fModified := false; fModified := false;
fOutputDirectory := '.'; fOutputDirectory := '.';
fProjectFile := ''; fProjectFile := '';
fTargetFileExt := ''; fTargetFileExt := {$IFDEF win32}'.exe'{$ELSE}''{$ENDIF};
fTitle := ''; fTitle := '';
fUnitOutputDirectory := '.'; fUnitOutputDirectory := '.';
end; end;
@ -1469,6 +1470,9 @@ end.
{ {
$Log$ $Log$
Revision 1.31 2001/10/18 13:01:31 lazarus
MG: fixed speedbuttons numglyphs>1 and started IDE debugging
Revision 1.30 2001/10/15 13:11:27 lazarus Revision 1.30 2001/10/15 13:11:27 lazarus
MG: added complete code MG: added complete code

View File

@ -1,22 +1,17 @@
/* XPM */ /* XPM */
static char * ActiveBreakPoint_xpm[] = { static char * ActiveBreakPoint_xpm[] = {
"16 16 3 1", "11 11 3 1",
" c None", " c None",
". c #000000", ". c #000000",
"+ c #FF0000", "+ c #FF0000",
" ", " ..... ",
" ", " .+++++. ",
" ..... ", " .+++++++. ",
" .+++++. ", ".+++++++++.",
" .+++++++. ", ".+++++++++.",
" .+++++++++. ", ".+++++++++.",
" .+++++++++. ", ".+++++++++.",
" .+++++++++. ", ".+++++++++.",
" .+++++++++. ", " .+++++++. ",
" .+++++++++. ", " .+++++. ",
" .+++++++. ", " ..... "};
" .+++++. ",
" ..... ",
" ",
" ",
" "};

View File

@ -1,22 +1,17 @@
/* XPM */ /* XPM */
static char * InactiveBreakPoint_xpm[] = { static char * InactiveBreakPoint_xpm[] = {
"16 16 3 1", "11 11 3 1",
" c None", " c None",
". c #000000", ". c #000000",
"+ c #0DA500", "+ c #0DA500",
" ", " ..... ",
" ", " .+++++. ",
" ..... ", " .+++++++. ",
" .+++++. ", ".+++++++++.",
" .+++++++. ", ".+++++++++.",
" .+++++++++. ", ".+++++++++.",
" .+++++++++. ", ".+++++++++.",
" .+++++++++. ", ".+++++++++.",
" .+++++++++. ", " .+++++++. ",
" .+++++++++. ", " .+++++. ",
" .+++++++. ", " ..... "};
" .+++++. ",
" ..... ",
" ",
" ",
" "};

View File

@ -1,80 +1,26 @@
/* XPM */ /* XPM */
static char * bookmark0_xpm[] = { static char * bookmark0_xpm[] = {
"16 16 61 1", "11 11 12 1",
" c None", " c None",
". c #23422D", ". c #000000",
"+ c #336041", "+ c #336041",
"@ c #203D29", "@ c #5F826A",
"# c #23412C", "# c #BBCABF",
"$ c #3C6749", "$ c #A3B7AA",
"% c #5F826A", "% c #FFFFFF",
"& c #8CA594", "& c #D1DBD4",
"* c #6B8C75", "* c #779580",
"= c #426C4F", "= c #E7ECE9",
"- c #376344", "- c #8DA695",
"; c #8DA695", "; c #497155",
"> c #CAD6CE", " ..... ",
", c #B9C9BE", " .+++++. ",
"' c #DDE4DF", " .++@#$++. ",
") c #95AD9D", ".++@%#&$++.",
"! c #356143", ".++##+*=++.",
"~ c #7F9B88", ".++##+*%++.",
"{ c #BCCAC0", ".++##+*%++.",
"] c #587D64", ".++$&+-=++.",
"^ c #7E9A87", " .+;=%%*+. ",
"/ c #D9E1DB", " .++*@+. ",
"( c #4E755A", " ..... "};
"_ c #487055",
": c #C7D3CB",
"< c #62856D",
"[ c #4B7357",
"} c #FCFCFC",
"| c #7A9783",
"1 c #91A998",
"2 c #CBD6CE",
"3 c #386446",
"4 c #FFFFFF",
"5 c #7F9B87",
"6 c #3E684B",
"7 c #366244",
"8 c #678871",
"9 c #F4F6F5",
"0 c #6D8D77",
"a c #567B61",
"b c #EEF2EF",
"c c #849F8D",
"d c #A2B6A8",
"e c #DEE5E0",
"f c #3D684B",
"g c #BAC9BE",
"h c #C4D1C8",
"i c #406A4D",
"j c #CDD8D1",
"k c #8EA796",
"l c #75947F",
"m c #D5DED8",
"n c #63856D",
"o c #779480",
"p c #6E8E78",
"q c #62846D",
"r c #3E694C",
"s c #85A08E",
"t c #C3D0C7",
"u c #AFC0B4",
"v c #668870",
" .++++++. ",
" @++++++++@ ",
" #++++$%&*=+# ",
" @++++-;>,')!+@ ",
".+++++~{]-^/(++.",
"+++++_:<++[}|+++",
"+++++123++[45+++",
"++++62{7++890+++",
"++++abc+++de_+++",
"++++abc++fghi+++",
"++++=jk!!lmn++++",
".++++oeppmq++++.",
" @+++rstuv7+++@ ",
" #++++++++++# ",
" @++++++++@ ",
" .++++++. "};

View File

@ -1,62 +1,25 @@
/* XPM */ /* XPM */
static char * bookmark1_xpm[] = { static char * bookmark1_xpm[] = {
"16 16 43 1", "11 11 11 1",
" c None", " c None",
". c #23422D", ". c #000000",
"+ c #336041", "+ c #336041",
"@ c #203D29", "@ c #5F826A",
"# c #23412C", "# c #8DA695",
"$ c #487155", "$ c #497155",
"% c #52785E", "% c #A3B7AA",
"& c #809C89", "& c #E7ECE9",
"* c #5B7F66", "* c #BBCABF",
"= c #3D684A", "= c #779580",
"- c #B2C3B7", "- c #D1DBD4",
"; c #CFD9D2", " ..... ",
"> c #F2F4F2", " .+++++. ",
", c #89A390", " .+++@#++. ",
"' c #396446", ".++$%&*+++.",
") c #708F79", ".++$=-*+++.",
"! c #DAE2DD", ".++++**+++.",
"~ c #5C8067", ".++++**+++.",
"{ c #668870", ".++++**+++.",
"] c #E3E9E5", " .+++**++. ",
"^ c #53795F", " .++@@+. ",
"/ c #376344", " ..... "};
"( c #7B9884",
"_ c #C3D0C7",
": c #406A4D",
"< c #487054",
"[ c #D0DAD3",
"} c #ADBFB3",
"| c #497156",
"1 c #D2DBD5",
"2 c #86A18F",
"3 c #6B8B75",
"4 c #F0F3F1",
"5 c #74927D",
"6 c #F4F6F4",
"7 c #567B62",
"8 c #819D8A",
"9 c #CBD6CE",
"0 c #6C8C76",
"a c #8AA391",
"b c #B8C8BD",
"c c #C2CFC6",
"d c #7E9A86",
" .++++++. ",
" @++++++++@ ",
" #++++$%&*++# ",
" @++++=-;>,+++@ ",
".+++++'%)!~++++.",
"++++++++{]^+++++",
"+++++++/(_:+++++",
"+++++++<[}++++++",
"+++++++|12++++++",
"+++++++34*++++++",
"+++++++567++++++",
".++++++89++++++.",
" @+++0abcd:+++@ ",
" #++++++++++# ",
" @++++++++@ ",
" .++++++. "};

View File

@ -1,80 +1,26 @@
/* XPM */ /* XPM */
static char * bookmark2_xpm[] = { static char * bookmark2_xpm[] = {
"16 16 61 1", "11 11 12 1",
" c None", " c None",
". c #23422D", ". c #000000",
"+ c #336041", "+ c #336041",
"@ c #203D29", "@ c #8DA695",
"# c #23412C", "# c #BBCABF",
"$ c #3E684B", "$ c #A3B7AA",
"% c #567B62", "% c #497155",
"& c #7F9B88", "& c #FFFFFF",
"* c #8CA594", "* c #E7ECE9",
"= c #5B7F66", "= c #779580",
"- c #3C6749", "- c #D1DBD4",
"; c #98AE9F", "; c #5F826A",
"> c #9CB1A2", " ..... ",
", c #ACBFB2", " .+++++. ",
"' c #C0CEC5", " .++@#$%+. ",
") c #D2DBD5", ".++@&#**++.",
"! c #53795F", ".++@@+=&++.",
"~ c #346042", ".+++++--++.",
"{ c #8BA593", ".+++%*-%++.",
"] c #E7ECE9", ".++%*#++++.",
"^ c #3A6547", " .+#&&&&+. ",
"/ c #3B6648", " .;====. ",
"( c #D1DBD4", " ..... "};
"_ c #B2C3B7",
": c #5F826A",
"< c #62846C",
"[ c #346142",
"} c #406A4D",
"| c #D3DDD6",
"1 c #ADBFB2",
"2 c #76947F",
"3 c #E6EBE7",
"4 c #6B8B75",
"5 c #356143",
"6 c #5B7F67",
"7 c #CFD9D2",
"8 c #789681",
"9 c #6D8D77",
"0 c #D0DAD3",
"a c #6C8C76",
"b c #366244",
"c c #3D684B",
"d c #6A8B75",
"e c #A7BAAD",
"f c #466F53",
"g c #64866E",
"h c #A4B8AA",
"i c #8DA695",
"j c #4B7257",
"k c #3F694C",
"l c #A9BCAF",
"m c #476F53",
"n c #4B7358",
"o c #E8EDE9",
"p c #EEF1EF",
"q c #B8C7BC",
"r c #CBD6CE",
"s c #E0E7E2",
"t c #4D7459",
"u c #D6DFD9",
"v c #C2CFC6",
" .++++++. ",
" @++++++++@ ",
" #+++$%&*=++# ",
" @+++-;>,')!~+@ ",
".++++{]^+/(_-++.",
"+++++:<[+}|1/+++",
"+++++++++234++++",
"+++++++5678[++++",
"+++++++90ab+++++",
"+++++cde4+f-++++",
"+++5ghij/klm++++",
".++nopqqqrs++++.",
" @+tuuuuuuv+++@ ",
" #++++++++++# ",
" @++++++++@ ",
" .++++++. "};

View File

@ -1,81 +1,26 @@
/* XPM */ /* XPM */
static char * bookmark3_xpm[] = { static char * bookmark3_xpm[] = {
"16 16 62 1", "11 11 12 1",
" c None", " c None",
". c #23422D", ". c #000000",
"+ c #336041", "+ c #336041",
"@ c #203D29", "@ c #A3B7AA",
"# c #23412C", "# c #BBCABF",
"$ c #3E684B", "$ c #497155",
"% c #567B62", "% c #E7ECE9",
"& c #7F9B88", "& c #D1DBD4",
"* c #8CA594", "* c #5F826A",
"= c #5E8168", "= c #8DA695",
"- c #3D674A", "- c #FFFFFF",
"; c #3C6749", "; c #779580",
"> c #98AE9F", " ..... ",
", c #B2C3B7", " .+++++. ",
"' c #ADBFB2", " .++@#@$+. ",
") c #D3DCD6", ".++@%#&%++.",
"! c #DEE5E0", ".++**+=%++.",
"~ c #779580", ".++++#-*++.",
"{ c #346042", ".++++;#%++.",
"] c #5E8269", ".++=@+=-++.",
"^ c #F6F8F6", " .+;---#+. ",
"/ c #487055", " .+$;*+. ",
"( c #466F52", " ..... "};
"_ c #D4DDD7",
": c #436C50",
"< c #356243",
"[ c #406A4D",
"} c #D3DDD6",
"| c #3B6648",
"1 c #A2B6A8",
"2 c #CCD7CF",
"3 c #4F765B",
"4 c #B0C1B5",
"5 c #B4C5B9",
"6 c #A5B9AB",
"7 c #60836B",
"8 c #5C8067",
"9 c #62846C",
"0 c #D6DFD9",
"a c #D1DBD4",
"b c #53795F",
"c c #7F9B87",
"d c #E9EEEA",
"e c #708F79",
"f c #446D51",
"g c #5B7F66",
"h c #3B6749",
"i c #A9BCAF",
"j c #D5DED8",
"k c #4E755A",
"l c #B5C5BB",
"m c #5E8169",
"n c #A4B8AA",
"o c #C3D0C7",
"p c #4B7358",
"q c #366244",
"r c #B1C2B6",
"s c #C0CEC4",
"t c #B9C8BE",
"u c #8AA492",
"v c #426C4F",
"w c #346142",
" .++++++. ",
" @++++++++@ ",
" #+++$%&*=-+# ",
" @+++;>,')!~{+@ ",
".++++]^/+(_,;++.",
"+++++:~<+[}'|+++",
"++++++++<123++++",
"+++++++4567+++++",
"+++++++890ab++++",
"+++++++++cde++++",
"+++f1g++hij$++++",
".++kdlbmnop++++.",
" @+qgrstuvw+++@ ",
" #++++++++++# ",
" @++++++++@ ",
" .++++++. "};

View File

@ -1,75 +1,26 @@
/* XPM */ /* XPM */
static char * bookmark4_xpm[] = { static char * bookmark4_xpm[] = {
"16 16 56 1", "11 11 12 1",
" c None", " c None",
". c #23422D", ". c #000000",
"+ c #336041", "+ c #336041",
"@ c #203D29", "@ c #779580",
"# c #23412C", "# c #BBCABF",
"$ c #62846D", "$ c #5F826A",
"% c #6E8E78", "% c #D1DBD4",
"& c #51775D", "& c #FFFFFF",
"* c #DAE2DC", "* c #A3B7AA",
"= c #B1C2B6", "= c #8DA695",
"- c #547A60", "- c #497155",
"; c #AABCB0", "; c #E7ECE9",
"> c #F0F3F1", " ..... ",
", c #71907B", " .+++++. ",
"' c #61836C", " .+++@#$+. ",
") c #86A18F", ".++++%&@++.",
"! c #FBFCFB", ".+++*=&@++.",
"~ c #63866E", ".++-;+&@++.",
"{ c #52785D", ".++##@&*-+.",
"] c #5B7F66", ".++#&&&&@+.",
"^ c #668870", " .++++&@+. ",
"/ c #CED8D1", " .+++@-. ",
"( c #466F53", " ..... "};
"_ c #356143",
": c #54795F",
"< c #9FB4A6",
"[ c #547960",
"} c #829D8A",
"| c #ADBFB3",
"1 c #5F826A",
"2 c #B7C7BD",
"3 c #597E65",
"4 c #386446",
"5 c #BDCBC1",
"6 c #8BA493",
"7 c #376345",
"8 c #AEC0B4",
"9 c #D5DED7",
"0 c #BCCBC0",
"a c #BBCABF",
"b c #C0CEC4",
"c c #EDF0EE",
"d c #C8D4CB",
"e c #AFC1B4",
"f c #497156",
"g c #4D7459",
"h c #53795F",
"i c #789581",
"j c #E2E8E4",
"k c #70907A",
"l c #50775C",
"m c #5E8169",
"n c #B5C5B9",
"o c #7F9B87",
"p c #B8C8BD",
"q c #52785E",
" .++++++. ",
" @++++++++@ ",
" #++++++$%++# ",
" @++++++&*=+++@ ",
".++++++-;>,++++.",
"++++++';)!~+++++",
"+++++{;]^/(+++++",
"+++_:<[+}|++++++",
"+++12344567+++++",
"+++890abcdef++++",
"+++ghhhijkl4++++",
".++++++mn++++++.",
" @+++++op+++++@ ",
" #++++q1++++# ",
" @++++++++@ ",
" .++++++. "};

View File

@ -1,75 +1,25 @@
/* XPM */ /* XPM */
static char * bookmark5_xpm[] = { static char * bookmark5_xpm[] = {
"16 16 56 1", "11 11 11 1",
" c None", " c None",
". c #23422D", ". c #000000",
"+ c #336041", "+ c #336041",
"@ c #203D29", "@ c #BBCABF",
"# c #23412C", "# c #8DA695",
"$ c #406A4D", "$ c #FFFFFF",
"% c #AABDB0", "% c #779580",
"& c #D6DFD9", "& c #E7ECE9",
"* c #D5DED8", "* c #A3B7AA",
"= c #9EB3A4", "= c #497155",
"- c #3B6648", "- c #5F826A",
"; c #436C50", " ..... ",
"> c #C8D4CC", " .+++++. ",
", c #BBCABF", " .++@@@#+. ",
"' c #B8C7BC", ".+++$@@#++.",
") c #B5C5BA", ".++%&@*=++.",
"! c #75937F", ".++%$@&*++.",
"~ c #366244", ".++--+#$++.",
"{ c #60836A", ".++##+#$++.",
"] c #B0C1B5", " .+%$$$*+. ",
"^ c #3E684B", " .+=%-+. ",
"/ c #3A6648", " ..... "};
"( c #356243",
"_ c #63866E",
": c #ADBFB2",
"< c #70907A",
"[ c #C2CFC6",
"} c #A0B5A6",
"| c #9EB4A5",
"1 c #6C8C76",
"2 c #53795F",
"3 c #73927D",
"4 c #E3E9E5",
"5 c #789681",
"6 c #BDCBC1",
"7 c #E6EBE8",
"8 c #386445",
"9 c #366243",
"0 c #B3C4B8",
"a c #466F53",
"b c #C4D1C8",
"c c #6A8B74",
"d c #446D50",
"e c #BECCC2",
"f c #51775D",
"g c #497155",
"h c #DAE2DC",
"i c #ADBFB3",
"j c #87A18F",
"k c #ACBEB2",
"l c #B9C8BD",
"m c #426C4F",
"n c #346142",
"o c #5B7F66",
"p c #8AA492",
"q c #8CA594",
" .++++++. ",
" @++++++++@ ",
" #++++++++++# ",
" @+++$%&&&*=-+@ ",
".++++;>,'')!~++.",
"+++++{]^--/(++++",
"+++++_:(++++++++",
"+++++<[}|1~+++++",
"+++++213=45+++++",
"++++++++~67+++++",
"++++^8++90,+++++",
".++abc+d3ef++++.",
" @+ghijklmn+++@ ",
" #nopq1m++++# ",
" @++++++++@ ",
" .++++++. "};

View File

@ -1,87 +1,25 @@
/* XPM */ /* XPM */
static char * bookmark6_xpm[] = { static char * bookmark6_xpm[] = {
"16 16 68 1", "11 11 11 1",
" c None", " c None",
". c #23422D", ". c #000000",
"+ c #336041", "+ c #336041",
"@ c #203D29", "@ c #5F826A",
"# c #23412C", "# c #BBCABF",
"$ c #346142", "$ c #497155",
"% c #62856D", "% c #FFFFFF",
"& c #5A7E65", "& c #D1DBD4",
"* c #466E52", "* c #A3B7AA",
"= c #8DA695", "= c #779580",
"- c #B2C3B7", "- c #E7ECE9",
"; c #9FB4A5", " ..... ",
"> c #7E9B87", " .+++++. ",
", c #3E684B", " .++@##@+. ",
"' c #97AD9E", ".++$%#&%$+.",
") c #A9BCAF", ".++*&@=+++.",
"! c #6A8B74", ".++#-%%-++.",
"~ c #ABBDB1", ".++#&+@%=+.",
"{ c #819D8A", ".++*&+$%=+.",
"] c #396547", " .+$-%%#+. ",
"^ c #708F79", " .++=@+. ",
"/ c #B4C4B9", " ..... "};
"( c #5D8168",
"_ c #AABCAF",
": c #4B7357",
"< c #477054",
"[ c #DAE2DC",
"} c #CDD8D0",
"| c #9AB0A0",
"1 c #91AA99",
"2 c #C9D4CC",
"3 c #D5DED8",
"4 c #5F826A",
"5 c #6D8D77",
"6 c #F4F6F5",
"7 c #71907A",
"8 c #3B6649",
"9 c #50765C",
"0 c #E3E9E4",
"a c #B1C2B6",
"b c #7F9B87",
"c c #FFFFFF",
"d c #386446",
"e c #D6DFD8",
"f c #BBCABF",
"g c #7A9783",
"h c #FCFCFC",
"i c #52785E",
"j c #476F53",
"k c #E3E9E5",
"l c #789681",
"m c #4E755A",
"n c #D3DCD6",
"o c #9BB1A1",
"p c #376344",
"q c #96AD9D",
"r c #CAD6CE",
"s c #4C7358",
"t c #356143",
"u c #668871",
"v c #CBD6CF",
"w c #93AB9B",
"x c #ABBDB0",
"y c #53785E",
"z c #688972",
"A c #8CA594",
"B c #7F9B88",
"C c #426C4F",
" .++++++. ",
" @++++++++@ ",
" #+++++$%&++# ",
" @++++*=-;>+++@ ",
".++++,')!++++++.",
"++++,~{]++++++++",
"++++^/(__:++++++",
"+++<[}|1234+++++",
"+++5678+90a+++++",
"+++bc:++def+++++",
"+++ghi++jkl+++++",
".++mnop]qrs++++.",
" @+tuvwqxy++++@ ",
" #++zABC++++# ",
" @++++++++@ ",
" .++++++. "};

View File

@ -1,69 +1,25 @@
/* XPM */ /* XPM */
static char * bookmark7_xpm[] = { static char * bookmark7_xpm[] = {
"16 16 50 1", "11 11 11 1",
" c None", " c None",
". c #23422D", ". c #000000",
"+ c #336041", "+ c #336041",
"@ c #203D29", "@ c #8DA695",
"# c #23412C", "# c #BBCABF",
"$ c #C2CFC6", "$ c #5F826A",
"% c #D6DFD9", "% c #D1DBD4",
"& c #D4DDD7", "& c #FFFFFF",
"* c #6C8D76", "* c #E7ECE9",
"= c #4B7257", "= c #A3B7AA",
"- c #CBD7CF", "- c #779580",
"; c #B8C7BC", " ..... ",
"> c #CFD9D2", " .+++++. ",
", c #D1DBD4", " .+@####$. ",
"' c #52785D", ".++@##%&$+.",
") c #6B8B75", ".+++++*@++.",
"! c #8CA594", ".++++=*+++.",
"~ c #3B6648", ".++++&@+++.",
"{ c #3C6749", ".+++-&++++.",
"] c #6D8D77", " .++#%+++. ",
"^ c #C8D4CC", " .+$$++. ",
"/ c #5B7F66", " ..... "};
"( c #406A4D",
"_ c #376345",
": c #CBD6CE",
"< c #8DA695",
"[ c #9AB0A1",
"} c #9DB2A4",
"| c #346142",
"1 c #346041",
"2 c #6C8C76",
"3 c #AFC0B4",
"4 c #487055",
"5 c #53785E",
"6 c #DBE3DE",
"7 c #688972",
"8 c #426B4F",
"9 c #9FB4A6",
"0 c #85A08E",
"a c #3B6649",
"b c #A1B5A7",
"c c #356243",
"d c #5D8068",
"e c #AEBFB3",
"f c #487054",
"g c #557A60",
"h c #BBCABF",
"i c #6B8C75",
"j c #24402D",
"k c #3D684B",
" .++++++. ",
" @++++++++@ ",
" #++++++++++# ",
" @+++$%%%%%&*+@ ",
".+++=-;;;;>,'++.",
"++++)!~~{]^/++++",
"++++{(++_:<_++++",
"+++++++{[}|+++++",
"++++++1234++++++",
"++++++567+++++++",
"+++++890a+++++++",
".++++!bc+++++++.",
" @+cdef+++++++@ ",
" #ghi+++++++# ",
" jk|++++++@ ",
" .++++++. "};

View File

@ -1,90 +1,26 @@
/* XPM */ /* XPM */
static char * bookmark8_xpm[] = { static char * bookmark8_xpm[] = {
"16 16 71 1", "11 11 12 1",
" c None", " c None",
". c #23422D", ". c #000000",
"+ c #336041", "+ c #336041",
"@ c #203D29", "@ c #8DA695",
"# c #23412C", "# c #BBCABF",
"$ c #446D51", "$ c #A3B7AA",
"% c #708F7A", "% c #497155",
"& c #8BA493", "& c #E7ECE9",
"* c #5C8067", "* c #D1DBD4",
"= c #3A6547", "= c #FFFFFF",
"- c #456E51", "- c #779580",
"; c #AFC0B4", "; c #5F826A",
"> c #BFCDC3", " ..... ",
", c #B3C4B8", " .+++++. ",
"' c #D0DAD3", " .++@#$%+. ",
") c #829D8B", ".++$&#*&++.",
"! c #366244", ".++#*+@=++.",
"~ c #93AB9B", ".++%===$++.",
"{ c #ADBFB3", ".++$&-@=;+.",
"] c #436C50", ".++#*+%=-+.",
"^ c #91A998", " .+-===&+. ",
"/ c #E5EBE7", " .+%--+. ",
"( c #50765C", " ..... "};
"_ c #DFE6E1",
": c #849F8D",
"< c #346142",
"[ c #98AE9F",
"} c #E2E8E4",
"| c #4D7459",
"1 c #D4DED7",
"2 c #BDCBC1",
"3 c #557A60",
"4 c #456E52",
"5 c #CDD8D0",
"6 c #7C9985",
"7 c #7F9B87",
"8 c #DDE4DF",
"9 c #C2CFC7",
"0 c #829E8B",
"a c #396547",
"b c #3D674A",
"c c #98AF9F",
"d c #ABBDB1",
"e c #6A8B74",
"f c #AEC0B4",
"g c #ECF0ED",
"h c #819D8A",
"i c #5E8169",
"j c #EBEFEC",
"k c #416B4E",
"l c #DEE5E0",
"m c #BBCABF",
"n c #789681",
"o c #FBFBFB",
"p c #587D63",
"q c #346041",
"r c #557B61",
"s c #DEE5E1",
"t c #CDD8D1",
"u c #CCD7D0",
"v c #60836B",
"w c #688972",
"x c #B3C3B8",
"y c #70907A",
"z c #356143",
"A c #577C63",
"B c #A0B4A7",
"C c #C3D0C7",
"D c #B2C3B7",
"E c #769480",
"F c #376344",
" .++++++. ",
" @++++++++@ ",
" #+++$%&*=++# ",
" @+++-;>,')!++@ ",
".++++~{]+^/(+++.",
"+++++_:+<[}|++++",
"+++++123456+++++",
"++++=75890a+++++",
"+++bcd3efgh+++++",
"+++ij*++klm+++++",
"+++nopq<rs:+++++",
".++-tuvwxy+++++.",
" @+zABCDEF++++@ ",
" #++++++++++# ",
" @++++++++@ ",
" .++++++. "};

View File

@ -1,87 +1,26 @@
/* XPM */ /* XPM */
static char * bookmark9_xpm[] = { static char * bookmark9_xpm[] = {
"16 16 68 1", "11 11 12 1",
" c None", " c None",
". c #23422D", ". c #000000",
"+ c #336041", "+ c #336041",
"@ c #203D29", "@ c #8DA695",
"# c #23412C", "# c #BBCABF",
"$ c #6F8E79", "$ c #A3B7AA",
"% c #8CA594", "% c #497155",
"& c #7C9985", "& c #FFFFFF",
"* c #3E694C", "* c #E7ECE9",
"= c #3C6749", "= c #D1DBD4",
"- c #708F79", "- c #779580",
"; c #BBCAC0", "; c #5F826A",
"> c #B3C4B8", " ..... ",
", c #D1DBD4", " .+++++. ",
"' c #90A897", " .++@#$%+. ",
") c #3A6547", ".++@&#*=++.",
"! c #6D8D77", ".++##+-&++.",
"~ c #CBD7CF", ".++$*-#&++.",
"{ c #456E52", ".++%=&=&++.",
"] c #577C62", ".++;;+@*++.",
"^ c #D9E1DC", " .+;&&&-+. ",
"/ c #91A999", " .+%-%+. ",
"( c #386446", " ..... "};
"_ c #436D50",
": c #B7C7BB",
"< c #7F9B88",
"[ c #CED8D1",
"} c #BDCCC2",
"| c #3D684B",
"1 c #799782",
"2 c #E6EBE7",
"3 c #698A73",
"4 c #72917B",
"5 c #E5EAE6",
"6 c #87A18F",
"7 c #346142",
"8 c #54795F",
"9 c #D4DDD6",
"0 c #8AA492",
"a c #356243",
"b c #416B4E",
"c c #9DB2A4",
"d c #EBF0ED",
"e c #95AC9C",
"f c #91A998",
"g c #BECCC2",
"h c #E4EAE6",
"i c #587C63",
"j c #436C50",
"k c #97AE9E",
"l c #ADBFB3",
"m c #C8D4CC",
"n c #AABDB0",
"o c #6F8F79",
"p c #C5D2C9",
"q c #466F53",
"r c #3F694C",
"s c #8BA593",
"t c #A5B8AB",
"u c #4F755B",
"v c #497156",
"w c #668871",
"x c #AFC0B4",
"y c #96AD9D",
"z c #366243",
"A c #72917C",
"B c #829D8A",
"C c #567B62",
" .++++++. ",
" @++++++++@ ",
" #++++$%&*++# ",
" @+++=-;>,')++@ ",
".++++!~{+]^/(++.",
"++++_:<+++[}|+++",
"++++123+++[}|+++",
"++++4567+890a+++",
"++++bcdefghi++++",
"+++++jkl0mn+++++",
"+++++++(opq+++++",
".+++++rstu+++++.",
" @+7vwxyv+++++@ ",
" #zABC++++++# ",
" @77++++++@ ",
" .++++++. "};

View File

@ -1,20 +1,24 @@
/* XPM */ /* XPM */
static char * btn_run_xpm[] = { static char * btn_run_xpm[] = {
"8 14 3 1", "16 14 7 1",
" c None", " c None",
". c #00FF00", ". c #146600",
"+ c #000000", "+ c #444444",
". ", "@ c #26B200",
" . ", "# c #898989",
". . ", "$ c #275919",
" . . ", "% c #000000",
". . . ", ".. + ",
" . . . ", ".@. ++ ",
". . . . ", ".@@. +#+ ",
" . . . +", ".@@@. +##+ ",
". . . + ", ".@@@@. +###+ ",
" . . + ", ".@@@@@. +####+ ",
". . + ", ".@@@@@@.+#####+ ",
" . + ", ".@@@@@$%+#####+%",
". + ", ".@@@@$% +####+% ",
"++ "}; ".@@@$% +###+% ",
".@@$% +##+% ",
".@$% +#+% ",
".$% ++% ",
"%% %% "};

View File

@ -119,12 +119,26 @@
+' U V W X Y Z ` ",'#10'" ...+.@.#.$.%.&.*.=.-./ ",'#10'";.>' +' U V W X Y Z ` ",'#10'" ...+.@.#.$.%.&.*.=.-./ ",'#10'";.>'
+'.- ,.''...).!.n ~.{. "};'#10 +'.- ,.''...).!.n ~.{. "};'#10
); );
LazarusResources.Add('btn_pause','XPM',
'/* XPM */'#10'static char * btn_pause_xpm[] = {'#10'"20 14 7 1",'#10'" '#9
+'c None",'#10'".'#9'c #0005A0",'#10'"+'#9'c #494949",'#10'"@'#9'c #0017EA'
+'",'#10'"#'#9'c #0300EF",'#10'"$'#9'c #000000",'#10'"%'#9'c #777777",'#10
+'".... ....++++ ++++",'#10'".@#$ .@#$+%%+ +%%+",'#10'".@#$ .@#$+%%+ '
+' +%%+",'#10'".@#$ .@#$+%%+ +%%+",'#10'".@#$ .@#$+%%+ +%%+",'#10'".@#'
+'$ .@#$+%%+ +%%+",'#10'".@#$ .@#$+%%+ +%%+",'#10'".@#$ .@#$+%%+ +%%'
+'+",'#10'".@#$ .@#$+%%+ +%%+",'#10'".@#$ .@#$+%%+ +%%+",'#10'".@#$ .'
+'@#$+%%+ +%%+",'#10'".@#$ .@#$+%%+ +%%+",'#10'".@#$ .@#$+%%+ +%%+",'
+#10'"$$$$ $$$$++++ ++++"};'#10
);
LazarusResources.Add('btn_run','XPM', LazarusResources.Add('btn_run','XPM',
'/* XPM */'#10'static char * btn_run_xpm[] = {'#10'"8 14 3 1",'#10'" '#9'c' '/* XPM */'#10'static char * btn_run_xpm[] = {'#10'"16 14 7 1",'#10'" '#9
+' None",'#10'".'#9'c #00FF00",'#10'"+'#9'c #000000",'#10'". ",'#10 +'c None",'#10'".'#9'c #146600",'#10'"+'#9'c #444444",'#10'"@'#9'c #26B200'
+'" . ",'#10'". . ",'#10'" . . ",'#10'". . . ",'#10'" . . . ' +'",'#10'"#'#9'c #898989",'#10'"$'#9'c #275919",'#10'"%'#9'c #000000",'#10
+' ",'#10'". . . . ",'#10'" . . . +",'#10'". . . + ",'#10'" . . + ",'#10 +'".. + ",'#10'".@. ++ ",'#10'".@@. +#+ ",'#10
+'". . + ",'#10'" . + ",'#10'". + ",'#10'"++ "};'#10 +'".@@@. +##+ ",'#10'".@@@@. +###+ ",'#10'".@@@@@. +####+ ",'#10
+'".@@@@@@.+#####+ ",'#10'".@@@@@$%+#####+%",'#10'".@@@@$% +####+% ",'#10
+'".@@@$% +###+% ",'#10'".@@$% +##+% ",'#10'".@$% +#+% ",'#10
+'".$% ++% ",'#10'"%% %% "};'#10
); );
LazarusResources.Add('btn_saveall','XPM', LazarusResources.Add('btn_saveall','XPM',
'/* XPM */'#10'static char * btn_saveall_xpm[] = {'#10'"15 15 156 2",'#10 '/* XPM */'#10'static char * btn_saveall_xpm[] = {'#10'"15 15 156 2",'#10
@ -250,6 +264,26 @@
+'.c.d.e.f.g.",'#10'"9 h.i.j.k.[.l.a.m.n.o.p.q.r.",'#10'"I s.t.u.9.0.0.v.w' +'.c.d.e.f.g.",'#10'"9 h.i.j.k.[.l.a.m.n.o.p.q.r.",'#10'"I s.t.u.9.0.0.v.w'
+'.2 x.y.z.. ",'#10'" A.B.0.C.D.E.F.G.H.I.+ + & "};'#10 +'.2 x.y.z.. ",'#10'" A.B.0.C.D.E.F.G.H.I.+ + & "};'#10
); );
LazarusResources.Add('btn_stepinto','XPM',
'/* XPM */'#10'static char * btn_stepinto_xpm[] = {'#10'"13 16 5 1",'#10'"'
+' '#9'c None",'#10'".'#9'c #000000",'#10'"+'#9'c #000083",'#10'"@'#9'c #F'
+'FFFFF",'#10'"#'#9'c #838583",'#10'". . ",'#10'" . ",'
+#10'" ",'#10'" . ",'#10'" ",'#10'" '
+' ..... ",'#10'" ... ",'#10'" . ",'#10'" +++++++ "'
+','#10'" +@@@@@+#",'#10'" +@@@@@+#",'#10'" +@@@@@+#",'#10'" '
+' +@@@@@+#",'#10'" +@@@@@+#",'#10'" +++++++#",'#10'" #####'
+'##"};'#10
);
LazarusResources.Add('btn_stepover','XPM',
'/* XPM */'#10'static char * btn_stepover_xpm[] = {'#10'"16 16 5 1",'#10'"'
+' '#9'c None",'#10'".'#9'c #000000",'#10'"+'#9'c #000083",'#10'"@'#9'c #F'
+'FFFFF",'#10'"#'#9'c #838583",'#10'" . . ",'#10'" . . '
+' ",'#10'" ",'#10'". . ",'#10'" '
+' ",'#10'" .....",'#10'" ... ",'#10'" '
+'. ",'#10'" +++++++ ",'#10'" +@@@@@+# ",'#10'" +@@@@@+# '
+' ",'#10'" +@@@@@+# ",'#10'" +@@@@@+# ",'#10'" +@@@@@+# '
+' ",'#10'" +++++++# ",'#10'" ####### "};'#10
);
LazarusResources.Add('btn_toggleform','XPM', LazarusResources.Add('btn_toggleform','XPM',
'/* XPM */'#10'static char * btn_toggleform_xpm[] = {'#10'"16 16 145 2",' '/* XPM */'#10'static char * btn_toggleform_xpm[] = {'#10'"16 16 145 2",'
+#10'" '#9'c None",'#10'". '#9'c #777A71",'#10'"+ '#9'c #000013",'#10'"@ ' +#10'" '#9'c None",'#10'". '#9'c #777A71",'#10'"+ '#9'c #000013",'#10'"@ '

View File

@ -39,28 +39,20 @@ var
gWidth : integer; gWidth : integer;
gHeight : integer; gHeight : integer;
DestRect: TRect; DestRect: TRect;
ImgID: integer;
begin begin
// for default assume only 1 glyph
gWidth := TPixMap(FOriginal).Width; gWidth := TPixMap(FOriginal).Width;
gHeight := TPixMap(FOriginal).Height; gHeight := TPixMap(FOriginal).Height;
Result := Rect(0, 0, gWidth, gHeight);
if NumGlyphs > 1 then if NumGlyphs > 1 then
begin gWidth := gWidth div NumGlyphs;
gWidth := TPixMap(FOriginal).Width div NumGlyphs;
ImgID:=0;
if (State = bsDown) and (NumGlyphs < 3) then case State of
State := bsUp; bsDisabled: if NumGlyphs>1 then ImgID:=1;
bsDown: if NumGlyphs>2 then ImgID:=2;
if State = bsDisabled then
Result := Rect(gWidth, 0, (2 * gWidth) - 1, gHeight - 1)
else if State = bsDown then
Result := Rect(2 * gWidth, 0, (3 * gWidth) - 1, gHeight - 1)
else
Result := Rect(0, 0, gWidth - 1, gHeight - 1);
end; end;
Result := Rect((ImgID*gWidth), 0, ((ImgID+1)*gWidth), gHeight);
DestRect:=Client; DestRect:=Client;
inc(DestRect.Left,Offset.X); inc(DestRect.Left,Offset.X);
inc(DestRect.Right,Offset.X); inc(DestRect.Right,Offset.X);

View File

@ -224,7 +224,7 @@ const
FillStyles: array[Boolean] of Integer = (BF_MIDDLE, 0); FillStyles: array[Boolean] of Integer = (BF_MIDDLE, 0);
var var
PaintRect: TRect; PaintRect: TRect;
DrawFlags: Integer; DrawFlags, GlyphWidth, GlyphHeight: Integer;
//R : TRect; //R : TRect;
Offset: TPoint; Offset: TPoint;
begin begin
@ -273,8 +273,7 @@ begin
InflateRect(PaintRect, -1, -1); InflateRect(PaintRect, -1, -1);
end; end;
if FState in [bsDown, bsExclusive] if FState in [bsDown, bsExclusive] then begin
then begin
if (FState = bsExclusive) if (FState = bsExclusive)
and (not FFlat or not FMouseInControl) and (not FFlat or not FMouseInControl)
then begin then begin
@ -290,10 +289,15 @@ begin
Offset.X := 0; Offset.X := 0;
Offset.Y := 0; Offset.Y := 0;
end; end;
inc(Offset.X,(PaintRect.Right-PaintRect.Left
-TButtonGlyph(FGlyph).Glyph.Width) div 2);
inc(Offset.Y,(PaintRect.Bottom-PaintRect.Top GlyphWidth:=TButtonGlyph(FGlyph).Glyph.Width;
-TButtonGlyph(FGlyph).Glyph.Height) div 2); if TButtonGlyph(FGlyph).NumGlyphs>1 then
GlyphWidth:=GlyphWidth div NumGlyphs;
GlyphHeight:=TButtonGlyph(FGlyph).Glyph.Height;
inc(Offset.X,(PaintRect.Right-PaintRect.Left-GlyphWidth) div 2);
inc(Offset.Y,(PaintRect.Bottom-PaintRect.Top-GlyphHeight) div 2);
//this needs to be done yet. //this needs to be done yet.
Assert(False,'Trace:TODO: DRAWTEXTBIDIMODEFLAGS'); Assert(False,'Trace:TODO: DRAWTEXTBIDIMODEFLAGS');
@ -526,6 +530,9 @@ end;
{ ============================================================================= { =============================================================================
$Log$ $Log$
Revision 1.10 2001/10/18 13:01:33 lazarus
MG: fixed speedbuttons numglyphs>1 and started IDE debugging
Revision 1.9 2001/07/03 10:30:32 lazarus Revision 1.9 2001/07/03 10:30:32 lazarus
MG: speedbuttonglyph centered, buttonglyph border fixed MG: speedbuttonglyph centered, buttonglyph border fixed