#97, copy menu iamge from toolbar + handle shortcut changes

This commit is contained in:
Basile Burg 2016-09-28 13:15:03 +02:00
parent f74c62cc83
commit e96cc705e2
No known key found for this signature in database
GPG Key ID: 1868039F415CB8CF
3 changed files with 79 additions and 19 deletions

View File

@ -30,6 +30,7 @@ type
public public
constructor Create(TheOwner: TComponent); override; constructor Create(TheOwner: TComponent); override;
destructor Destroy; override; destructor Destroy; override;
procedure toBitmap(value: TBitmap);
end; end;
(** (**
@ -134,6 +135,11 @@ begin
FToolBar.Repaint; FToolBar.Repaint;
end; end;
procedure TCEToolButton.toBitmap(value: TBitmap);
begin
value.Assign(fPng);
end;
procedure TCEToolButton.Paint; procedure TCEToolButton.Paint;
var var
rc: TRect; rc: TRect;

View File

@ -231,6 +231,7 @@ type
TCEDebugOptions = class(TCEDebugOptionsBase, ICEEditableOptions) TCEDebugOptions = class(TCEDebugOptionsBase, ICEEditableOptions)
private private
FonChangesApplied: TNotifyEvent;
fBackup: TCEDebugOptionsBase; fBackup: TCEDebugOptionsBase;
function optionedWantCategory(): string; function optionedWantCategory(): string;
function optionedWantEditorKind: TOptionEditorKind; function optionedWantEditorKind: TOptionEditorKind;
@ -240,6 +241,7 @@ type
public public
constructor create(aOwner: TComponent); override; constructor create(aOwner: TComponent); override;
destructor destroy; override; destructor destroy; override;
property onChangesApplied: TNotifyEvent read FonChangesApplied write FonChangesApplied;
end; end;
TGdbState = (gsNone, gsRunning, gsPaused); TGdbState = (gsNone, gsRunning, gsPaused);
@ -277,6 +279,7 @@ type
protected protected
procedure setToolBarFlat(value: boolean); override; procedure setToolBarFlat(value: boolean); override;
private private
fUpdateMenu: boolean;
fGdbState: TGdbState; fGdbState: TGdbState;
fSubj: TCEDebugObserverSubject; fSubj: TCEDebugObserverSubject;
fDoc: TCESynMemo; fDoc: TCESynMemo;
@ -292,6 +295,7 @@ type
fCatchPause: boolean; fCatchPause: boolean;
fOptions: TCEDebugOptions; fOptions: TCEDebugOptions;
// //
procedure optionsChangesApplied(sender: TObject);
procedure menuDeclare(item: TMenuItem); procedure menuDeclare(item: TMenuItem);
procedure menuUpdate(item: TMenuItem); procedure menuUpdate(item: TMenuItem);
// //
@ -381,6 +385,7 @@ destructor TCEDebugOptionsBase.destroy;
begin begin
fIgnoredSignals.Free; fIgnoredSignals.Free;
fCommandsHistory.Free; fCommandsHistory.Free;
fShortcuts.Free;
inherited; inherited;
end; end;
@ -458,7 +463,12 @@ begin
case event of case event of
oeeSelectCat: fBackup.assign(self); oeeSelectCat: fBackup.assign(self);
oeeCancel: assign(fBackup); oeeCancel: assign(fBackup);
oeeAccept: fBackup.assign(self); oeeAccept:
begin
fBackup.assign(self);
if assigned(FonChangesApplied) then
FonChangesApplied(self);
end;
end; end;
end; end;
@ -681,6 +691,7 @@ begin
fSubj:= TCEDebugObserverSubject.Create; fSubj:= TCEDebugObserverSubject.Create;
fOptions:= TCEDebugOptions.create(self); fOptions:= TCEDebugOptions.create(self);
Edit1.Items.Assign(fOptions.commandsHistory); Edit1.Items.Assign(fOptions.commandsHistory);
fOptions.onChangesApplied:=@optionsChangesApplied;
// //
AssignPng(btnSendCom, 'ACCEPT'); AssignPng(btnSendCom, 'ACCEPT');
setState(gsNone); setState(gsNone);
@ -710,57 +721,79 @@ end;
procedure TCEGdbWidget.menuDeclare(item: TMenuItem); procedure TCEGdbWidget.menuDeclare(item: TMenuItem);
var var
itm: TMenuItem; itm: TMenuItem;
bmp: TBitmap;
i: integer;
begin begin
item.Caption:='Debugger'; item.Caption:='Debugger';
item.Clear; item.Clear;
bmp := TBitmap.Create;
itm := TMenuItem.Create(item); itm := TMenuItem.Create(item);
itm.ShortCut:=fOptions.shortcuts.start; itm.ShortCut:=fOptions.shortcuts.start;
itm.Caption:='Start'; itm.Caption:='Start';
itm.OnClick:= @executeFromShortcut; itm.OnClick:= @executeFromShortcut;
itm.Tag:=0; itm.Tag:=0;
AssignPng(itm.Bitmap, btnStart.resourceName);
item.Add(itm); item.Add(itm);
btnStart.toBitmap(bmp);
itm.Bitmap.Assign(bmp);
i := item.GetImageList.Add(bmp, nil);
itm.ImageIndex:= i;
itm := TMenuItem.Create(item); itm := TMenuItem.Create(item);
itm.ShortCut:=fOptions.shortcuts.stop; itm.ShortCut:=fOptions.shortcuts.stop;
itm.Caption:='Stop'; itm.Caption:='Stop';
itm.OnClick:= @executeFromShortcut; itm.OnClick:= @executeFromShortcut;
itm.Tag:=1; itm.Tag:=1;
AssignPng(itm.Bitmap, btnStop.resourceName);
item.Add(itm); item.Add(itm);
btnStop.toBitmap(bmp);
itm.Bitmap.Assign(bmp);
i := item.GetImageList.Add(bmp, nil);
itm.ImageIndex:= i;
itm := TMenuItem.Create(item); itm := TMenuItem.Create(item);
itm.ShortCut:=fOptions.shortcuts.pause; itm.ShortCut:=fOptions.shortcuts.pause;
itm.Caption:='Pause'; itm.Caption:='Pause';
itm.OnClick:= @executeFromShortcut; itm.OnClick:= @executeFromShortcut;
itm.Tag:=2; itm.Tag:=2;
AssignPng(itm.Bitmap, btnPause.resourceName);
item.Add(itm); item.Add(itm);
btnPause.toBitmap(bmp);
itm.Bitmap.Assign(bmp);
i := item.GetImageList.Add(bmp, nil);
itm.ImageIndex:= i;
itm := TMenuItem.Create(item); itm := TMenuItem.Create(item);
itm.ShortCut:=fOptions.shortcuts.continue; itm.ShortCut:=fOptions.shortcuts.continue;
itm.Caption:='Continue'; itm.Caption:='Continue';
itm.OnClick:= @executeFromShortcut; itm.OnClick:= @executeFromShortcut;
itm.Tag:=3; itm.Tag:=3;
AssignPng(itm.Bitmap, btnContinue.resourceName);
item.Add(itm); item.Add(itm);
btnContinue.toBitmap(bmp);
itm.Bitmap.Assign(bmp);
i := item.GetImageList.Add(bmp, nil);
itm.ImageIndex:= i;
itm := TMenuItem.Create(item); itm := TMenuItem.Create(item);
itm.ShortCut:=fOptions.shortcuts.step; itm.ShortCut:=fOptions.shortcuts.step;
itm.Caption:='Step'; itm.Caption:='Step';
itm.OnClick:= @executeFromShortcut; itm.OnClick:= @executeFromShortcut;
itm.Tag:=4; itm.Tag:=4;
AssignPng(itm.Bitmap, btnNext.resourceName);
item.Add(itm); item.Add(itm);
btnNext.toBitmap(bmp);
itm.Bitmap.Assign(bmp);
i := item.GetImageList.Add(bmp, nil);
itm.ImageIndex:= i;
itm := TMenuItem.Create(item); itm := TMenuItem.Create(item);
itm.ShortCut:=fOptions.shortcuts.stepOver; itm.ShortCut:=fOptions.shortcuts.stepOver;
itm.Caption:='Step over'; itm.Caption:='Step over';
itm.OnClick:= @executeFromShortcut; itm.OnClick:= @executeFromShortcut;
itm.Tag:=5; itm.Tag:=5;
AssignPng(itm.Bitmap, btnOver.resourceName);
item.Add(itm); item.Add(itm);
btnOver.toBitmap(bmp);
itm.Bitmap.Assign(bmp);
i := item.GetImageList.Add(bmp, nil);
itm.ImageIndex:= i;
itm := TMenuItem.Create(item); itm := TMenuItem.Create(item);
itm.Caption:= '-'; itm.Caption:= '-';
@ -772,24 +805,35 @@ begin
itm.Caption:='Update registers'; itm.Caption:='Update registers';
itm.OnClick:= @executeFromShortcut; itm.OnClick:= @executeFromShortcut;
itm.Tag:=6; itm.Tag:=6;
AssignPng(itm.Bitmap, btnReg.resourceName);
item.Add(itm); item.Add(itm);
btnReg.toBitmap(bmp);
itm.Bitmap.Assign(bmp);
i := item.GetImageList.Add(bmp, nil);
itm.ImageIndex:= i;
itm := TMenuItem.Create(item); itm := TMenuItem.Create(item);
itm.ShortCut:=fOptions.shortcuts.updateStack; itm.ShortCut:=fOptions.shortcuts.updateStack;
itm.Caption:='Update call stack'; itm.Caption:='Update call stack';
itm.OnClick:= @executeFromShortcut; itm.OnClick:= @executeFromShortcut;
itm.Tag:=7; itm.Tag:=7;
AssignPng(itm.Bitmap, btnStack.resourceName);
item.Add(itm); item.Add(itm);
btnStack.toBitmap(bmp);
itm.Bitmap.Assign(bmp);
i := item.GetImageList.Add(bmp, nil);
itm.ImageIndex:= i;
itm := TMenuItem.Create(item); itm := TMenuItem.Create(item);
itm.ShortCut:=fOptions.shortcuts.updateVariables; itm.ShortCut:=fOptions.shortcuts.updateVariables;
itm.Caption:='Update the variables'; itm.Caption:='Update the variables';
itm.OnClick:= @executeFromShortcut; itm.OnClick:= @executeFromShortcut;
itm.Tag:=8; itm.Tag:=8;
AssignPng(itm.Bitmap, btnVariables.resourceName);
item.Add(itm); item.Add(itm);
btnVariables.toBitmap(bmp);
itm.Bitmap.Assign(bmp);
i := item.GetImageList.Add(bmp, nil);
itm.ImageIndex:= i;
bmp.Free;
end; end;
procedure TCEGdbWidget.menuUpdate(item: TMenuItem); procedure TCEGdbWidget.menuUpdate(item: TMenuItem);
@ -797,21 +841,29 @@ var
i: integer; i: integer;
itm: TMenuItem; itm: TMenuItem;
begin begin
if item.isNil then if item.isNil or not fUpdateMenu then
exit; exit;
fUpdateMenu := false;
for i:= 0 to item.Count-1 do for i:= 0 to item.Count-1 do
begin begin
itm := item.Items[i]; itm := item.Items[i];
case itm.Tag of case itm.Tag of
0: 0: itm.ShortCut:=fOptions.shortcuts.start;
1: itm.ShortCut:=fOptions.shortcuts.stop;
2: itm.ShortCut:=fOptions.shortcuts.pause;
3: itm.ShortCut:=fOptions.shortcuts.continue;
4: itm.ShortCut:=fOptions.shortcuts.step;
5: itm.ShortCut:=fOptions.shortcuts.stepOver;
6: itm.ShortCut:=fOptions.shortcuts.updateRegisters;
7: itm.ShortCut:=fOptions.shortcuts.updateStack;
8: itm.ShortCut:=fOptions.shortcuts.updateVariables;
end;
end;
end;
procedure TCEGdbWidget.optionsChangesApplied(sender: TObject);
begin begin
itm.ShortCut:=fOptions.shortcuts.start; fUpdateMenu:=true;
// TODO-cGDB: image assigned from toolbar button not displayed in menu
//if itm.Bitmap.Empty then
// AssignPng(itm.Bitmap, btnStart.resourceName);
end;
end;
end;
end; end;
procedure TCEGdbWidget.executeFromShortcut(sender: TObject); procedure TCEGdbWidget.executeFromShortcut(sender: TObject);

View File

@ -1883,6 +1883,7 @@ var
itm: TMenuItem; itm: TMenuItem;
doneUpdate: boolean = false; doneUpdate: boolean = false;
begin begin
if mainMenu.Images = nil then exit;
for j := 0 to fMainMenuSubj.observersCount-1 do for j := 0 to fMainMenuSubj.observersCount-1 do
begin begin
// try to update existing entry. // try to update existing entry.
@ -1897,10 +1898,11 @@ begin
continue; continue;
// otherwise propose to create a new entry // otherwise propose to create a new entry
itm := TMenuItem.Create(Self); itm := TMenuItem.Create(Self);
mainMenu.Items.Add(itm);
(fMainMenuSubj.observers[j] as ICEMainMenuProvider).menuDeclare(itm); (fMainMenuSubj.observers[j] as ICEMainMenuProvider).menuDeclare(itm);
itm.Tag:= PtrInt(fMainMenuSubj.observers[j]); itm.Tag:= PtrInt(fMainMenuSubj.observers[j]);
case itm.Count > 0 of case itm.Count > 0 of
true: mainMenu.Items.Add(itm); true: ;
false: itm.Free; false: itm.Free;
end; end;
end; end;