mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-23 17:52:16 +02:00
implemented interface for the New dialog of the IDE
git-svn-id: trunk@6283 -
This commit is contained in:
parent
a2102621c5
commit
0769547146
1
.gitattributes
vendored
1
.gitattributes
vendored
@ -712,6 +712,7 @@ ideintf/idecommands.pas svneol=native#text/pascal
|
||||
ideintf/imagelisteditor.pp svneol=native#text/pascal
|
||||
ideintf/lazideintf.pas svneol=native#text/pascal
|
||||
ideintf/listviewpropedit.pp svneol=native#text/pascal
|
||||
ideintf/newitemintf.pas svneol=native#text/pascal
|
||||
ideintf/objectinspector.pp svneol=native#text/pascal
|
||||
ideintf/objinspstrconsts.pas svneol=native#text/pascal
|
||||
ideintf/packageintf.pas svneol=native#text/pascal
|
||||
|
177
ideintf/newitemintf.pas
Normal file
177
ideintf/newitemintf.pas
Normal file
@ -0,0 +1,177 @@
|
||||
{
|
||||
*****************************************************************************
|
||||
* *
|
||||
* See the file COPYING.modifiedLGPL, included in this distribution, *
|
||||
* for details about the copyright. *
|
||||
* *
|
||||
* This program is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *
|
||||
* *
|
||||
*****************************************************************************
|
||||
|
||||
Author: Mattias Gaertner
|
||||
|
||||
Abstract:
|
||||
IDE interface to the items in the new dialog.
|
||||
}
|
||||
unit NewItemIntf;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils;
|
||||
|
||||
type
|
||||
// Flags/Options for the items
|
||||
TNewIDEItemFlag = (
|
||||
niifCopy,
|
||||
niifInherited,
|
||||
niifUse
|
||||
);
|
||||
TNewIDEItemFlags = set of TNewIDEItemFlag;
|
||||
|
||||
TNewIDEItemTemplate = class;
|
||||
|
||||
|
||||
{ TNewIDEItemCategory }
|
||||
|
||||
TNewIDEItemCategory = class
|
||||
protected
|
||||
FName: string;
|
||||
function GetCount: integer; virtual; abstract;
|
||||
function GetItems(Index: integer): TNewIDEItemTemplate; virtual; abstract;
|
||||
public
|
||||
constructor Create(const AName: string); virtual; abstract;
|
||||
procedure Clear; virtual; abstract;
|
||||
procedure Add(ATemplate: TNewIDEItemTemplate); virtual; abstract;
|
||||
function LocalizedName: string; virtual; abstract;
|
||||
function Description: string; virtual; abstract;
|
||||
function IndexOfCategory(const CategoryName: string): integer; virtual; abstract;
|
||||
function FindCategoryByName(const CategoryName: string): TNewIDEItemCategory; virtual; abstract;
|
||||
public
|
||||
property Count: integer read GetCount;
|
||||
property Items[Index: integer]: TNewIDEItemTemplate read GetItems; default;
|
||||
property Name: string read FName;
|
||||
end;
|
||||
|
||||
|
||||
{ TNewIDEItemCategories }
|
||||
|
||||
TNewIDEItemCategories = class
|
||||
protected
|
||||
function GetItems(Index: integer): TNewIDEItemCategory; virtual; abstract;
|
||||
procedure SetItems(Index: integer; const AValue: TNewIDEItemCategory); virtual; abstract;
|
||||
public
|
||||
procedure Clear; virtual; abstract;
|
||||
procedure Add(ACategory: TNewIDEItemCategory); virtual; abstract;
|
||||
function Count: integer; virtual; abstract;
|
||||
function IndexOf(const CategoryName: string): integer; virtual; abstract;
|
||||
function FindByName(const CategoryName: string): TNewIDEItemCategory; virtual; abstract;
|
||||
procedure RegisterItem(const Paths: string; NewItem: TNewIDEItemTemplate); virtual; abstract;
|
||||
procedure UnregisterItem(NewItem: TNewIDEItemTemplate); virtual; abstract;
|
||||
function FindCategoryByPath(const Path: string;
|
||||
ErrorOnNotFound: boolean): TNewIDEItemCategory; virtual; abstract;
|
||||
public
|
||||
property Items[Index: integer]: TNewIDEItemCategory
|
||||
read GetItems write SetItems; default;
|
||||
end;
|
||||
|
||||
|
||||
var
|
||||
NewIDEItems: TNewIDEItemCategories;// will be set by the IDE
|
||||
|
||||
type
|
||||
{ TNewIDEItemTemplate }
|
||||
|
||||
TNewIDEItemTemplate = class(TPersistent)
|
||||
private
|
||||
fCategory: TNewIDEItemCategory;
|
||||
protected
|
||||
FAllowedFlags: TNewIDEItemFlags;
|
||||
FDefaultFlag: TNewIDEItemFlag;
|
||||
FName: string;
|
||||
public
|
||||
constructor Create(const AName: string; ADefaultFlag: TNewIDEItemFlag;
|
||||
TheAllowedFlags: TNewIDEItemFlags);
|
||||
function LocalizedName: string; virtual;
|
||||
function Description: string; virtual;
|
||||
function CreateCopy: TNewIDEItemTemplate; virtual;
|
||||
procedure Assign(Source: TPersistent); override;
|
||||
public
|
||||
property DefaultFlag: TNewIDEItemFlag read FDefaultFlag;
|
||||
property AllowedFlags: TNewIDEItemFlags read FAllowedFlags;
|
||||
property Name: string read FName;
|
||||
property Category: TNewIDEItemCategory read fCategory write fCategory; // main category
|
||||
end;
|
||||
TNewIDEItemTemplateClass = class of TNewIDEItemTemplate;
|
||||
|
||||
|
||||
procedure RegisterNewDialogItem(const Paths: string;
|
||||
NewItem: TNewIDEItemTemplate);
|
||||
procedure UnregisterNewDialogItem(NewItem: TNewIDEItemTemplate);
|
||||
|
||||
|
||||
implementation
|
||||
|
||||
procedure RegisterNewDialogItem(const Paths: string;
|
||||
NewItem: TNewIDEItemTemplate);
|
||||
begin
|
||||
if NewIDEItems=nil then
|
||||
raise Exception.Create('RegisterNewDialogItem NewIDEItems=nil');
|
||||
NewIDEItems.RegisterItem(Paths,NewItem);
|
||||
end;
|
||||
|
||||
procedure UnregisterNewDialogItem(NewItem: TNewIDEItemTemplate);
|
||||
begin
|
||||
if NewIDEItems=nil then
|
||||
raise Exception.Create('RegisterNewDialogItem NewIDEItems=nil');
|
||||
NewIDEItems.UnregisterItem(NewItem);
|
||||
end;
|
||||
|
||||
|
||||
{ TNewIDEItemTemplate }
|
||||
|
||||
constructor TNewIDEItemTemplate.Create(const AName: string;
|
||||
ADefaultFlag: TNewIDEItemFlag; TheAllowedFlags: TNewIDEItemFlags);
|
||||
begin
|
||||
FName:=AName;
|
||||
FDefaultFlag:=ADefaultFlag;
|
||||
FAllowedFlags:=TheAllowedFlags;
|
||||
Include(FAllowedFlags,FDefaultFlag);
|
||||
end;
|
||||
|
||||
function TNewIDEItemTemplate.LocalizedName: string;
|
||||
begin
|
||||
Result:=Name;
|
||||
end;
|
||||
|
||||
function TNewIDEItemTemplate.Description: string;
|
||||
begin
|
||||
Result:='<Description not set>';
|
||||
end;
|
||||
|
||||
function TNewIDEItemTemplate.CreateCopy: TNewIDEItemTemplate;
|
||||
begin
|
||||
Result:=TNewIDEItemTemplateClass(ClassType).Create(
|
||||
Name,DefaultFlag,AllowedFlags);
|
||||
Result.Assign(Self);
|
||||
end;
|
||||
|
||||
procedure TNewIDEItemTemplate.Assign(Source: TPersistent);
|
||||
var
|
||||
Src: TNewIDEItemTemplate;
|
||||
begin
|
||||
if Source is TNewIDEItemTemplate then begin
|
||||
Src:=TNewIDEItemTemplate(Source);
|
||||
FName:=Src.Name;
|
||||
FDefaultFlag:=Src.DefaultFlag;
|
||||
FAllowedFlags:=Src.AllowedFlags;
|
||||
end else
|
||||
inherited Assign(Source);
|
||||
end;
|
||||
|
||||
end.
|
||||
|
Loading…
Reference in New Issue
Block a user