diff --git a/designer/menueditorform.pas b/designer/menueditorform.pas index a658154913..cfe885b243 100644 --- a/designer/menueditorform.pas +++ b/designer/menueditorform.pas @@ -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. diff --git a/ide/projectinspector.pas b/ide/projectinspector.pas index 791df12af2..bc2a714ee2 100644 --- a/ide/projectinspector.pas +++ b/ide/projectinspector.pas @@ -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 ii 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;