improved new menueditor from Martin Patik

git-svn-id: trunk@4080 -
This commit is contained in:
mattias 2003-04-19 17:54:37 +00:00
parent 7f5b8c7441
commit 46e9c9a5ab
2 changed files with 171 additions and 91 deletions

View File

@ -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.

View File

@ -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;