mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-13 04:49:29 +02:00
improved new menueditor from Martin Patik
git-svn-id: trunk@4080 -
This commit is contained in:
parent
7f5b8c7441
commit
46e9c9a5ab
@ -44,49 +44,65 @@ type
|
|||||||
|
|
||||||
TMainMenuEditorForm = class(TForm)
|
TMainMenuEditorForm = class(TForm)
|
||||||
private
|
private
|
||||||
FDesignerMainMenu: TDesignerMainMenu;
|
fDesignerMainMenu: TDesignerMainMenu;
|
||||||
|
fPanel: TPanel;
|
||||||
|
// fEditor: TComponentEditor;
|
||||||
public
|
public
|
||||||
constructor CreateWithMenu(TheOwner: TComponent; AMenu: TMainMenu);
|
constructor CreateWithMenu(aOwner: TComponent; aMenu: TMenu; aEditor: TComponentEditor);
|
||||||
destructor Destroy; override;
|
destructor Destroy; override;
|
||||||
procedure Paint; override;
|
procedure Paint; override;
|
||||||
procedure MouseDownClick(Sender: TObject; Button: TMouseButton;
|
|
||||||
Shift: TShiftState; X,Y: Integer);
|
property DesignerMainMenu: TDesignerMainMenu read fDesignerMainMenu write fDesignerMainMenu;
|
||||||
property DesignerMainMenu: TDesignerMainMenu read FDesignerMainMenu
|
property Panel: TPanel read FPanel write FPanel;
|
||||||
write FDesignerMainMenu;
|
// property Editor: TComponentEditor read fEditor write fEditor;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TMenuComponentEditor
|
{ TMenuComponentEditor
|
||||||
The default component editor for TMenu. }
|
The default component editor for TMenu. }
|
||||||
TMainMenuComponentEditor = class(TDefaultComponentEditor)
|
TMainMenuComponentEditor = class(TComponentEditor)
|
||||||
private
|
private
|
||||||
FMenu: TMainMenu;
|
fMenu: TMainMenu;
|
||||||
protected
|
protected
|
||||||
public
|
public
|
||||||
constructor Create(AComponent: TComponent;
|
constructor Create(AComponent: TComponent; ADesigner: TComponentEditorDesigner); override;
|
||||||
ADesigner: TComponentEditorDesigner); override;
|
|
||||||
procedure Edit; override;
|
procedure Edit; override;
|
||||||
property Menu: TMainMenu read FMenu write FMenu;
|
property Menu: TMainMenu read fMenu write fMenu;
|
||||||
|
|
||||||
|
// function Menu: TMenu;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
|
|
||||||
{ TMainMenuEditorForm }
|
{ TMainMenuEditorForm }
|
||||||
|
|
||||||
constructor TMainMenuEditorForm.CreateWithMenu(TheOwner: TComponent;
|
constructor TMainMenuEditorForm.CreateWithMenu(aOwner: TComponent; aMenu: TMenu; aEditor: TComponentEditor);
|
||||||
AMenu: TMainMenu);
|
var
|
||||||
|
Cmp: TPanel;
|
||||||
begin
|
begin
|
||||||
inherited Create(TheOwner);
|
inherited Create(AOwner);
|
||||||
width:=800;
|
|
||||||
height:=600;
|
|
||||||
position:=poDesktopCenter;
|
|
||||||
OnMouseDown:=@MouseDownClick;
|
|
||||||
|
|
||||||
DesignerMainMenu:=TDesignerMainMenu.CreateWithMenu(Self,AMenu);
|
width:=400;
|
||||||
|
height:=200;
|
||||||
|
position:=poDesktopCenter;
|
||||||
|
|
||||||
|
Cmp:=TPanel.Create(self);
|
||||||
|
with Cmp do
|
||||||
|
begin
|
||||||
|
Parent:=self;
|
||||||
|
Align:=alClient;
|
||||||
|
Bevelouter:=bvnone;
|
||||||
|
Bevelwidth:=0;
|
||||||
|
end;
|
||||||
|
|
||||||
|
Panel:=Cmp;
|
||||||
|
|
||||||
|
DesignerMainMenu:=TDesignerMainMenu.CreateWithMenu(Self,aMenu,aEditor);
|
||||||
with DesignerMainMenu do
|
with DesignerMainMenu do
|
||||||
begin
|
begin
|
||||||
Parent:=Self;
|
Parent:=Self;
|
||||||
|
ParentCanvas:=Canvas;
|
||||||
LoadMainMenu;
|
LoadMainMenu;
|
||||||
SetCoordinates(1,1,DesignerMainMenu.Root);
|
SetCoordinates(1,1,0,DesignerMainMenu.Root);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -98,79 +114,29 @@ end;
|
|||||||
procedure TMainMenuEditorForm.Paint;
|
procedure TMainMenuEditorForm.Paint;
|
||||||
begin
|
begin
|
||||||
inherited Paint;
|
inherited Paint;
|
||||||
DesignerMainMenu.Erase(DesignerMainmenu.Root,Canvas);
|
DesignerMainMenu.Draw(DesignerMainMenu.Root, Panel, Panel);
|
||||||
DesignerMainMenu.Draw(DesignerMainMenu.Root,Canvas);
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure TMainMenuEditorForm.MouseDownClick(Sender: TObject;
|
|
||||||
Button: TMouseButton; Shift: TShiftState; X,Y: Integer);
|
|
||||||
begin
|
|
||||||
DesignerMainMenu.MouseDownClick(DesignerMainMenu.Root,X,Y);
|
|
||||||
Paint;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TMainMenuComponentEditor}
|
{ TMainMenuComponentEditor}
|
||||||
|
|
||||||
constructor TMainMenuComponentEditor.Create(AComponent: TComponent;
|
constructor TMainMenuComponentEditor.Create(AComponent: TComponent; ADesigner: TComponentEditorDesigner);
|
||||||
ADesigner: TComponentEditorDesigner);
|
|
||||||
var
|
|
||||||
m1: TMenuItem;
|
|
||||||
m2: TMenuItem;
|
|
||||||
m3: TMenuItem;
|
|
||||||
m4: TMenuItem;
|
|
||||||
m5: TMenuItem;
|
|
||||||
m6: TMenuItem;
|
|
||||||
m7: TMenuItem;
|
|
||||||
m8: TMenuItem;
|
|
||||||
begin
|
begin
|
||||||
inherited Create(AComponent,ADesigner);
|
inherited Create(AComponent,ADesigner);
|
||||||
Menu:=TMainMenu.Create(AComponent);
|
|
||||||
|
|
||||||
m1:=TMenuItem.Create(AComponent);
|
|
||||||
m1.Caption:='File';
|
|
||||||
Menu.Items.Add(m1);
|
|
||||||
|
|
||||||
m2:=TMenuItem.Create(AComponent);
|
|
||||||
m2.Caption:='Power';
|
|
||||||
Menu.Items.Add(m2);
|
|
||||||
|
|
||||||
m3:=TMenuItem.Create(AComponent);
|
|
||||||
m3.Caption:='Settings';
|
|
||||||
Menu.Items.Add(m3);
|
|
||||||
|
|
||||||
m4:=TMenuItem.Create(AComponent);
|
|
||||||
m4.Caption:='New';
|
|
||||||
m1.Add(m4);
|
|
||||||
|
|
||||||
m5:=TMenuItem.Create(AComponent);
|
|
||||||
m5.Caption:='Wizard';
|
|
||||||
m1.Add(m5);
|
|
||||||
|
|
||||||
m6:=TMenuItem.Create(AComponent);
|
|
||||||
m6.Caption:='Project';
|
|
||||||
m5.Add(m6);
|
|
||||||
|
|
||||||
m7:=TMenuItem.Create(AComponent);
|
|
||||||
m7.Caption:='Power On';
|
|
||||||
m2.Add(m7);
|
|
||||||
|
|
||||||
m8:=TMenuItem.Create(AComponent);
|
|
||||||
m8.Caption:='Another Caption';
|
|
||||||
m6.Add(m8);
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TMainMenuComponentEditor.Edit;
|
procedure TMainMenuComponentEditor.Edit;
|
||||||
var
|
var
|
||||||
MainMenuEditorForm: TMainMenuEditorForm;
|
MainMenuEditorForm: TMainMenuEditorForm;
|
||||||
begin
|
begin
|
||||||
if Menu=nil then RaiseGDBException('TMainMenuComponentEditor.Edit Menu=nil');
|
//if Menu=nil then RaiseGDBException('TMainMenuComponentEditor.Edit Menu=nil');
|
||||||
MainMenuEditorForm:=TMainMenuEditorForm.CreateWithMenu(Application,Menu);
|
MainMenuEditorForm:=TMainMenuEditorForm.CreateWithMenu(Application,TMenu(GetComponent),Self);
|
||||||
MainMenuEditorForm.ShowModal;
|
MainMenuEditorForm.Show;
|
||||||
MainMenuEditorForm.Free;
|
//MainMenuEditorForm.Free;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ //TMainMenuComponentEditor}
|
{ //TMainMenuComponentEditor}
|
||||||
|
|
||||||
initialization
|
initialization
|
||||||
RegisterComponentEditor(TMainMenu,TMainMenuComponentEditor);
|
RegisterComponentEditor(TMainMenu,TMainMenuComponentEditor);
|
||||||
|
RegisterComponentEditor(TPopupMenu,TMainMenuComponentEditor);
|
||||||
end.
|
end.
|
||||||
|
@ -44,6 +44,13 @@ uses
|
|||||||
Project;
|
Project;
|
||||||
|
|
||||||
type
|
type
|
||||||
|
TProjectInspectorFlag = (
|
||||||
|
pifItemsChanged,
|
||||||
|
pifButtonsChanged,
|
||||||
|
pifTitleChanged
|
||||||
|
);
|
||||||
|
TProjectInspectorFlags = set of TProjectInspectorFlag;
|
||||||
|
|
||||||
TProjectInspectorForm = class(TForm)
|
TProjectInspectorForm = class(TForm)
|
||||||
OpenBitBtn: TBitBtn;
|
OpenBitBtn: TBitBtn;
|
||||||
AddBitBtn: TBitBtn;
|
AddBitBtn: TBitBtn;
|
||||||
@ -67,12 +74,19 @@ type
|
|||||||
ImageIndexFiles: integer;
|
ImageIndexFiles: integer;
|
||||||
ImageIndexRequired: integer;
|
ImageIndexRequired: integer;
|
||||||
ImageIndexRemovedRequired: integer;
|
ImageIndexRemovedRequired: integer;
|
||||||
|
ImageIndexProject: integer;
|
||||||
ImageIndexUnit: integer;
|
ImageIndexUnit: integer;
|
||||||
ImageIndexRegisterUnit: integer;
|
ImageIndexRegisterUnit: integer;
|
||||||
ImageIndexText: integer;
|
ImageIndexText: integer;
|
||||||
ImageIndexBinary: integer;
|
ImageIndexBinary: integer;
|
||||||
|
FFlags: TProjectInspectorFlags;
|
||||||
procedure SetLazProject(const AValue: TProject);
|
procedure SetLazProject(const AValue: TProject);
|
||||||
procedure SetupComponents;
|
procedure SetupComponents;
|
||||||
|
procedure UpdateProjectItems;
|
||||||
|
procedure UpdateRequiredPackages;
|
||||||
|
procedure UpdateRemovedRequiredPackages;
|
||||||
|
function GetImageIndexOfFile(AFile: TUnitInfo): integer;
|
||||||
|
function GetSelectedFile: TUnitInfo;
|
||||||
public
|
public
|
||||||
constructor Create(TheOwner: TComponent); override;
|
constructor Create(TheOwner: TComponent); override;
|
||||||
destructor Destroy; override;
|
destructor Destroy; override;
|
||||||
@ -131,12 +145,12 @@ end;
|
|||||||
|
|
||||||
procedure TProjectInspectorForm.ItemsTreeViewDblClick(Sender: TObject);
|
procedure TProjectInspectorForm.ItemsTreeViewDblClick(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
|
OpenBitBtnClick(Self);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TProjectInspectorForm.ItemsTreeViewSelectionChanged(Sender: TObject);
|
procedure TProjectInspectorForm.ItemsTreeViewSelectionChanged(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
|
UpdateButtons;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TProjectInspectorForm.AddBitBtnClick(Sender: TObject);
|
procedure TProjectInspectorForm.AddBitBtnClick(Sender: TObject);
|
||||||
@ -194,6 +208,8 @@ begin
|
|||||||
AddResImg('pkg_required');
|
AddResImg('pkg_required');
|
||||||
ImageIndexRemovedRequired:=Count;
|
ImageIndexRemovedRequired:=Count;
|
||||||
AddResImg('pkg_removedrequired');
|
AddResImg('pkg_removedrequired');
|
||||||
|
ImageIndexProject:=Count;
|
||||||
|
AddResImg('pkg_project');
|
||||||
ImageIndexUnit:=Count;
|
ImageIndexUnit:=Count;
|
||||||
AddResImg('pkg_unit');
|
AddResImg('pkg_unit');
|
||||||
ImageIndexRegisterUnit:=Count;
|
ImageIndexRegisterUnit:=Count;
|
||||||
@ -253,6 +269,78 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TProjectInspectorForm.UpdateProjectItems;
|
||||||
|
var
|
||||||
|
CurFile: TUnitInfo;
|
||||||
|
i: Integer;
|
||||||
|
CurNode: TTreeNode;
|
||||||
|
NodeText: String;
|
||||||
|
begin
|
||||||
|
ItemsTreeView.BeginUpdate;
|
||||||
|
if LazProject<>nil then begin
|
||||||
|
CurFile:=LazProject.FirstPartOfProject;
|
||||||
|
i:=0;
|
||||||
|
while CurFile<>nil do begin
|
||||||
|
NodeText:=
|
||||||
|
CreateRelativePath(CurFile.Filename,LazProject.ProjectDirectory);
|
||||||
|
if i<FilesNode.Count then begin
|
||||||
|
CurNode:=FilesNode.Items[i];
|
||||||
|
CurNode.Text:=NodeText;
|
||||||
|
end else
|
||||||
|
CurNode:=ItemsTreeView.Items.AddChild(FilesNode,NodeText);
|
||||||
|
CurNode.ImageIndex:=GetImageIndexOfFile(CurFile);
|
||||||
|
CurNode.SelectedIndex:=CurNode.ImageIndex;
|
||||||
|
CurFile:=CurFile.NextPartOfProject;
|
||||||
|
inc(i);
|
||||||
|
end;
|
||||||
|
while FilesNode.Count>i do FilesNode.Items[FilesNode.Count-1].Free;
|
||||||
|
FilesNode.Expanded:=true;
|
||||||
|
end else begin
|
||||||
|
// delete file nodes
|
||||||
|
FilesNode.HasChildren:=false;
|
||||||
|
end;
|
||||||
|
ItemsTreeView.EndUpdate;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TProjectInspectorForm.UpdateRequiredPackages;
|
||||||
|
begin
|
||||||
|
ItemsTreeView.BeginUpdate;
|
||||||
|
ItemsTreeView.EndUpdate;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TProjectInspectorForm.UpdateRemovedRequiredPackages;
|
||||||
|
begin
|
||||||
|
ItemsTreeView.BeginUpdate;
|
||||||
|
ItemsTreeView.EndUpdate;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TProjectInspectorForm.GetImageIndexOfFile(AFile: TUnitInfo): integer;
|
||||||
|
begin
|
||||||
|
if FilenameIsPascalUnit(AFile.Filename) then
|
||||||
|
Result:=ImageIndexUnit
|
||||||
|
else if (LazProject<>nil) and (LazProject.MainUnitinfo=AFile) then
|
||||||
|
Result:=ImageIndexProject
|
||||||
|
else
|
||||||
|
Result:=ImageIndexText;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TProjectInspectorForm.GetSelectedFile: TUnitInfo;
|
||||||
|
var
|
||||||
|
CurNode: TTreeNode;
|
||||||
|
NodeIndex: Integer;
|
||||||
|
begin
|
||||||
|
Result:=nil;
|
||||||
|
if LazProject=nil then exit;
|
||||||
|
CurNode:=ItemsTreeView.Selected;
|
||||||
|
if (CurNode=nil) or (CurNode.Parent<>FilesNode) then exit;
|
||||||
|
NodeIndex:=CurNode.Index;
|
||||||
|
Result:=LazProject.FirstPartOfProject;
|
||||||
|
while (NodeIndex>0) and (Result<>nil) do begin
|
||||||
|
Result:=Result.NextPartOfProject;
|
||||||
|
dec(NodeIndex);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
constructor TProjectInspectorForm.Create(TheOwner: TComponent);
|
constructor TProjectInspectorForm.Create(TheOwner: TComponent);
|
||||||
var
|
var
|
||||||
ALayout: TIDEWindowLayout;
|
ALayout: TIDEWindowLayout;
|
||||||
@ -273,6 +361,8 @@ end;
|
|||||||
|
|
||||||
destructor TProjectInspectorForm.Destroy;
|
destructor TProjectInspectorForm.Destroy;
|
||||||
begin
|
begin
|
||||||
|
BeginUpdate;
|
||||||
|
LazProject:=nil;
|
||||||
inherited Destroy;
|
inherited Destroy;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -306,32 +396,56 @@ procedure TProjectInspectorForm.UpdateTitle;
|
|||||||
var
|
var
|
||||||
NewCaption: String;
|
NewCaption: String;
|
||||||
begin
|
begin
|
||||||
|
if FUpdateLock>0 then begin
|
||||||
|
Include(FFlags,pifTitleChanged);
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
Exclude(FFlags,pifTitleChanged);
|
||||||
if LazProject=nil then
|
if LazProject=nil then
|
||||||
Caption:='Project Inspector'
|
Caption:='Project Inspector'
|
||||||
else begin
|
else begin
|
||||||
NewCaption:=LazProject.Title;
|
NewCaption:=LazProject.Title;
|
||||||
if NewCaption='' then
|
if NewCaption='' then
|
||||||
NewCaption:=ExtractFilenameOnly(LazProject.ProjectInfoFile);
|
NewCaption:=ExtractFilenameOnly(LazProject.ProjectInfoFile);
|
||||||
Caption:=NewCaption;
|
Caption:='Project Inspector - '+NewCaption;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TProjectInspectorForm.UpdateButtons;
|
procedure TProjectInspectorForm.UpdateButtons;
|
||||||
|
var
|
||||||
|
CurFile: TUnitInfo;
|
||||||
begin
|
begin
|
||||||
AddBitBtn.Enabled:=true;
|
if FUpdateLock>0 then begin
|
||||||
RemoveBitBtn.Enabled:=true;
|
Include(FFlags,pifButtonsChanged);
|
||||||
OpenBitBtn.Enabled:=true;
|
exit;
|
||||||
OptionsBitBtn.Enabled:=true;
|
end;
|
||||||
|
Exclude(FFlags,pifButtonsChanged);
|
||||||
|
if LazProject<>nil then begin
|
||||||
|
AddBitBtn.Enabled:=true;
|
||||||
|
CurFile:=GetSelectedFile;
|
||||||
|
RemoveBitBtn.Enabled:=(CurFile<>nil) and (CurFile<>LazProject.MainUnitInfo);
|
||||||
|
OpenBitBtn.Enabled:=(CurFile<>nil);
|
||||||
|
OptionsBitBtn.Enabled:=true;
|
||||||
|
end else begin
|
||||||
|
AddBitBtn.Enabled:=false;
|
||||||
|
RemoveBitBtn.Enabled:=false;
|
||||||
|
OpenBitBtn.Enabled:=false;
|
||||||
|
OptionsBitBtn.Enabled:=false;
|
||||||
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TProjectInspectorForm.UpdateItems;
|
procedure TProjectInspectorForm.UpdateItems;
|
||||||
begin
|
begin
|
||||||
// update project files
|
if FUpdateLock>0 then begin
|
||||||
|
Include(FFlags,pifItemsChanged);
|
||||||
// update required packages
|
exit;
|
||||||
|
end;
|
||||||
// update removed required packages
|
Exclude(FFlags,pifItemsChanged);
|
||||||
|
ItemsTreeView.BeginUpdate;
|
||||||
|
UpdateProjectItems;
|
||||||
|
UpdateRequiredPackages;
|
||||||
|
UpdateRemovedRequiredPackages;
|
||||||
|
ItemsTreeView.EndUpdate;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user