mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-11 22:37:28 +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)
|
||||
private
|
||||
FDesignerMainMenu: TDesignerMainMenu;
|
||||
fDesignerMainMenu: TDesignerMainMenu;
|
||||
fPanel: TPanel;
|
||||
// fEditor: TComponentEditor;
|
||||
public
|
||||
constructor CreateWithMenu(TheOwner: TComponent; AMenu: TMainMenu);
|
||||
constructor CreateWithMenu(aOwner: TComponent; aMenu: TMenu; aEditor: TComponentEditor);
|
||||
destructor Destroy; 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 write fDesignerMainMenu;
|
||||
property Panel: TPanel read FPanel write FPanel;
|
||||
// property Editor: TComponentEditor read fEditor write fEditor;
|
||||
end;
|
||||
|
||||
{ TMenuComponentEditor
|
||||
The default component editor for TMenu. }
|
||||
TMainMenuComponentEditor = class(TDefaultComponentEditor)
|
||||
TMainMenuComponentEditor = class(TComponentEditor)
|
||||
private
|
||||
FMenu: TMainMenu;
|
||||
fMenu: TMainMenu;
|
||||
protected
|
||||
public
|
||||
constructor Create(AComponent: TComponent;
|
||||
ADesigner: TComponentEditorDesigner); override;
|
||||
constructor Create(AComponent: TComponent; ADesigner: TComponentEditorDesigner); override;
|
||||
procedure Edit; override;
|
||||
property Menu: TMainMenu read FMenu write FMenu;
|
||||
property Menu: TMainMenu read fMenu write fMenu;
|
||||
|
||||
// function Menu: TMenu;
|
||||
end;
|
||||
|
||||
implementation
|
||||
|
||||
{ TMainMenuEditorForm }
|
||||
|
||||
constructor TMainMenuEditorForm.CreateWithMenu(TheOwner: TComponent;
|
||||
AMenu: TMainMenu);
|
||||
constructor TMainMenuEditorForm.CreateWithMenu(aOwner: TComponent; aMenu: TMenu; aEditor: TComponentEditor);
|
||||
var
|
||||
Cmp: TPanel;
|
||||
begin
|
||||
inherited Create(TheOwner);
|
||||
width:=800;
|
||||
height:=600;
|
||||
position:=poDesktopCenter;
|
||||
OnMouseDown:=@MouseDownClick;
|
||||
inherited Create(AOwner);
|
||||
|
||||
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
|
||||
begin
|
||||
Parent:=Self;
|
||||
ParentCanvas:=Canvas;
|
||||
LoadMainMenu;
|
||||
SetCoordinates(1,1,DesignerMainMenu.Root);
|
||||
SetCoordinates(1,1,0,DesignerMainMenu.Root);
|
||||
end;
|
||||
end;
|
||||
|
||||
@ -98,79 +114,29 @@ end;
|
||||
procedure TMainMenuEditorForm.Paint;
|
||||
begin
|
||||
inherited Paint;
|
||||
DesignerMainMenu.Erase(DesignerMainmenu.Root,Canvas);
|
||||
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;
|
||||
DesignerMainMenu.Draw(DesignerMainMenu.Root, Panel, Panel);
|
||||
end;
|
||||
|
||||
{ TMainMenuComponentEditor}
|
||||
|
||||
constructor TMainMenuComponentEditor.Create(AComponent: TComponent;
|
||||
ADesigner: TComponentEditorDesigner);
|
||||
var
|
||||
m1: TMenuItem;
|
||||
m2: TMenuItem;
|
||||
m3: TMenuItem;
|
||||
m4: TMenuItem;
|
||||
m5: TMenuItem;
|
||||
m6: TMenuItem;
|
||||
m7: TMenuItem;
|
||||
m8: TMenuItem;
|
||||
constructor TMainMenuComponentEditor.Create(AComponent: TComponent; ADesigner: TComponentEditorDesigner);
|
||||
begin
|
||||
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;
|
||||
|
||||
procedure TMainMenuComponentEditor.Edit;
|
||||
var
|
||||
MainMenuEditorForm: TMainMenuEditorForm;
|
||||
begin
|
||||
if Menu=nil then RaiseGDBException('TMainMenuComponentEditor.Edit Menu=nil');
|
||||
MainMenuEditorForm:=TMainMenuEditorForm.CreateWithMenu(Application,Menu);
|
||||
MainMenuEditorForm.ShowModal;
|
||||
MainMenuEditorForm.Free;
|
||||
//if Menu=nil then RaiseGDBException('TMainMenuComponentEditor.Edit Menu=nil');
|
||||
MainMenuEditorForm:=TMainMenuEditorForm.CreateWithMenu(Application,TMenu(GetComponent),Self);
|
||||
MainMenuEditorForm.Show;
|
||||
//MainMenuEditorForm.Free;
|
||||
end;
|
||||
|
||||
{ //TMainMenuComponentEditor}
|
||||
|
||||
initialization
|
||||
RegisterComponentEditor(TMainMenu,TMainMenuComponentEditor);
|
||||
|
||||
RegisterComponentEditor(TPopupMenu,TMainMenuComponentEditor);
|
||||
end.
|
||||
|
@ -44,6 +44,13 @@ uses
|
||||
Project;
|
||||
|
||||
type
|
||||
TProjectInspectorFlag = (
|
||||
pifItemsChanged,
|
||||
pifButtonsChanged,
|
||||
pifTitleChanged
|
||||
);
|
||||
TProjectInspectorFlags = set of TProjectInspectorFlag;
|
||||
|
||||
TProjectInspectorForm = class(TForm)
|
||||
OpenBitBtn: TBitBtn;
|
||||
AddBitBtn: TBitBtn;
|
||||
@ -67,12 +74,19 @@ type
|
||||
ImageIndexFiles: integer;
|
||||
ImageIndexRequired: integer;
|
||||
ImageIndexRemovedRequired: integer;
|
||||
ImageIndexProject: integer;
|
||||
ImageIndexUnit: integer;
|
||||
ImageIndexRegisterUnit: integer;
|
||||
ImageIndexText: integer;
|
||||
ImageIndexBinary: integer;
|
||||
FFlags: TProjectInspectorFlags;
|
||||
procedure SetLazProject(const AValue: TProject);
|
||||
procedure SetupComponents;
|
||||
procedure UpdateProjectItems;
|
||||
procedure UpdateRequiredPackages;
|
||||
procedure UpdateRemovedRequiredPackages;
|
||||
function GetImageIndexOfFile(AFile: TUnitInfo): integer;
|
||||
function GetSelectedFile: TUnitInfo;
|
||||
public
|
||||
constructor Create(TheOwner: TComponent); override;
|
||||
destructor Destroy; override;
|
||||
@ -131,12 +145,12 @@ end;
|
||||
|
||||
procedure TProjectInspectorForm.ItemsTreeViewDblClick(Sender: TObject);
|
||||
begin
|
||||
|
||||
OpenBitBtnClick(Self);
|
||||
end;
|
||||
|
||||
procedure TProjectInspectorForm.ItemsTreeViewSelectionChanged(Sender: TObject);
|
||||
begin
|
||||
|
||||
UpdateButtons;
|
||||
end;
|
||||
|
||||
procedure TProjectInspectorForm.AddBitBtnClick(Sender: TObject);
|
||||
@ -194,6 +208,8 @@ begin
|
||||
AddResImg('pkg_required');
|
||||
ImageIndexRemovedRequired:=Count;
|
||||
AddResImg('pkg_removedrequired');
|
||||
ImageIndexProject:=Count;
|
||||
AddResImg('pkg_project');
|
||||
ImageIndexUnit:=Count;
|
||||
AddResImg('pkg_unit');
|
||||
ImageIndexRegisterUnit:=Count;
|
||||
@ -253,6 +269,78 @@ begin
|
||||
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);
|
||||
var
|
||||
ALayout: TIDEWindowLayout;
|
||||
@ -273,6 +361,8 @@ end;
|
||||
|
||||
destructor TProjectInspectorForm.Destroy;
|
||||
begin
|
||||
BeginUpdate;
|
||||
LazProject:=nil;
|
||||
inherited Destroy;
|
||||
end;
|
||||
|
||||
@ -306,32 +396,56 @@ procedure TProjectInspectorForm.UpdateTitle;
|
||||
var
|
||||
NewCaption: String;
|
||||
begin
|
||||
if FUpdateLock>0 then begin
|
||||
Include(FFlags,pifTitleChanged);
|
||||
exit;
|
||||
end;
|
||||
Exclude(FFlags,pifTitleChanged);
|
||||
if LazProject=nil then
|
||||
Caption:='Project Inspector'
|
||||
else begin
|
||||
NewCaption:=LazProject.Title;
|
||||
if NewCaption='' then
|
||||
NewCaption:=ExtractFilenameOnly(LazProject.ProjectInfoFile);
|
||||
Caption:=NewCaption;
|
||||
Caption:='Project Inspector - '+NewCaption;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TProjectInspectorForm.UpdateButtons;
|
||||
var
|
||||
CurFile: TUnitInfo;
|
||||
begin
|
||||
AddBitBtn.Enabled:=true;
|
||||
RemoveBitBtn.Enabled:=true;
|
||||
OpenBitBtn.Enabled:=true;
|
||||
OptionsBitBtn.Enabled:=true;
|
||||
if FUpdateLock>0 then begin
|
||||
Include(FFlags,pifButtonsChanged);
|
||||
exit;
|
||||
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;
|
||||
|
||||
procedure TProjectInspectorForm.UpdateItems;
|
||||
begin
|
||||
// update project files
|
||||
|
||||
// update required packages
|
||||
|
||||
// update removed required packages
|
||||
|
||||
if FUpdateLock>0 then begin
|
||||
Include(FFlags,pifItemsChanged);
|
||||
exit;
|
||||
end;
|
||||
Exclude(FFlags,pifItemsChanged);
|
||||
ItemsTreeView.BeginUpdate;
|
||||
UpdateProjectItems;
|
||||
UpdateRequiredPackages;
|
||||
UpdateRemovedRequiredPackages;
|
||||
ItemsTreeView.EndUpdate;
|
||||
end;
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user