fixed opening main unit

git-svn-id: trunk@4090 -
This commit is contained in:
mattias 2003-04-21 18:00:52 +00:00
parent ab6281bbf8
commit 14e8b67c16
9 changed files with 234 additions and 102 deletions

View File

@ -42,10 +42,15 @@ unit JITForms;
interface
uses
{$IFDEF IDE_MEM_CHECK}
{$IFDEF IDE_MEM_CHECK}
MemCheck,
{$ENDIF}
Classes, SysUtils, CompReg, Forms, Controls, LCLLinux, Dialogs, JITForm;
{$ENDIF}
Classes, SysUtils, Forms, Controls, LCLLinux, Dialogs, JITForm,
{$IFDEF EnablePkgs}
ComponentReg;
{$ELSE}
CompReg;
{$ENDIF}
type
//----------------------------------------------------------------------------
@ -72,7 +77,9 @@ type
FCurReadComponentClass: TComponentClass;
FForms: TList; // list of TJITForm
FOnReaderError: TJITReaderErrorEvent;
{$IFNDEF EnablePkgs}
FRegCompList:TRegisteredComponentList;
{$ENDIF}
// jit procedures
function CreateVMTCopy(SourceClass:TClass; const NewClassName:ShortString):Pointer;
procedure FreevmtCopy(vmtCopy:Pointer);
@ -107,7 +114,9 @@ type
destructor Destroy; override;
property Items[Index:integer]:TForm read GetItem; default;
function Count:integer;
{$IFNDEF EnablePkgs}
property RegCompList:TRegisteredComponentList read FRegCompList write FRegCompList;
{$ENDIF}
function AddNewJITForm:integer;
function AddJITFormFromStream(BinStream:TStream):integer;
procedure DestroyJITForm(JITForm:TForm);
@ -744,14 +753,18 @@ end;
procedure TJITForms.ReaderFindComponentClass(Reader: TReader;
const FindClassName: Ansistring; var ComponentClass: TComponentClass);
var
RegComp:TRegisteredComponent;
RegComp: TRegisteredComponent;
Action: TModalResult;
ErrorType: TJITFormError;
begin
fCurReadComponent:=nil;
fCurReadComponentClass:=ComponentClass;
if ComponentClass=nil then begin
{$IFDEF EnablePkgs}
RegComp:=IDEComponentPalette.FindComponent(FindClassName);
{$ELSE}
RegComp:=FRegCompList.FindComponentClassByName(FindClassName);
{$ENDIF}
if RegComp<>nil then begin
//writeln('[TJITForms.ReaderFindComponentClass] '''+FindClassName
// +''' is registered');

View File

@ -32,6 +32,10 @@ unit CompReg;
{$MODE OBJFPC}{$H+}
{$IFDEF EnablePkgs}
This unit will be deleted in future
{$ENDIF}
interface
uses Classes, SysUtils;

View File

@ -39,8 +39,13 @@ uses
MemCheck,
{$ENDIF}
Classes, AbstractFormeditor, Controls, PropEdits, TypInfo, ObjectInspector,
Forms, Menus, IDEComp, JITForms, Compreg, ComponentEditors, KeyMapping,
EditorOptions, Dialogs;
Forms, Menus, JITForms,
{$IFDEF EnablePkgs}
ComponentReg,
{$ELSE}
CompReg, IDEComp,
{$ENDIF}
ComponentEditors, KeyMapping, EditorOptions, Dialogs;
Const OrdinalTypes = [tkInteger,tkChar,tkENumeration,tkbool];
@ -618,7 +623,9 @@ begin
FComponentInterfaceList := TList.Create;
FSelectedComponents := TComponentSelectionList.Create;
JITFormList := TJITForms.Create;
{$IFNDEF EnablePkgs}
JITFormList.RegCompList := RegCompList;
{$ENDIF}
JITFormList.OnReaderError:=@JITFormListReaderError;
DesignerMenuItemClick:=@OnDesignerMenuItemClick;
end;

View File

@ -39,6 +39,10 @@ unit IDEComp;
{$linklib crypt}
{$ENDIF}
{$IFDEF EnablePkgs}
This unit will be deleted in future
{$ENDIF}
interface
uses
@ -51,6 +55,7 @@ uses
SynHighlighterLFM, SynHighlighterMulti,
db
{$IFDEF INTERBASE}
// WANRING: Don't use this, use CustomIDEComps instead
,interbase
{$ENDIF}
{$IFDEF CustomIDEComps}

View File

@ -40,11 +40,17 @@ uses
{$IFDEF IDE_MEM_CHECK}
MemCheck,
{$ENDIF}
Classes, LazarusIDEStrConsts, LCLType, LclLinux, Compiler, StdCtrls, Forms,
Buttons, Menus, ComCtrls, Spin, ProjectDefs, Project, SysUtils, FileCtrl,
Controls, Graphics, ExtCtrls, Dialogs, LazConf, CompReg, CodeToolManager,
Splash, TransferMacros, ObjectInspector, PropEdits, SynEditKeyCmds,
OutputFilter, IDEDefs, MsgView, EnvironmentOpts, EditorOptions, IDEComp,
Classes, LCLType, LCLLinux, Compiler, StdCtrls, Forms,
Buttons, Menus, ComCtrls, Spin, SysUtils, FileCtrl,
Controls, Graphics, ExtCtrls, Dialogs, CodeToolManager, SynEditKeyCmds,
LazConf, LazarusIDEStrConsts, ProjectDefs, Project,
{$IFDEF EnablePkgs}
ComponentReg,
{$ELSE}
CompReg, IDEComp,
{$ENDIF}
Splash, TransferMacros, ObjectInspector, PropEdits,
OutputFilter, IDEDefs, MsgView, EnvironmentOpts, EditorOptions,
FormEditor, CompilerOptions, KeyMapping, IDEProcs, UnitEditor, Debugger,
IDEOptionDefs, CodeToolsDefines;
@ -1094,15 +1100,6 @@ end;
procedure TMainIDEBar.SetupComponentsMenu;
begin
itmCompsConfigCustomComps := TMenuItem.Create(Self);
itmCompsConfigCustomComps.Name:='itmCompsConfigCustomComps';
itmCompsConfigCustomComps.Caption := lisMenuConfigCustomComps;
mnuComponents.Add(itmCompsConfigCustomComps);
{$IFDEF EnablePkgs}
mnuComponents.Add(CreateMenuSeparator);
{$ENDIF}
itmPkgOpenPackage := TMenuItem.Create(Self);
itmPkgOpenPackage.Name:='itmPkgOpenPackage';
itmPkgOpenPackage.Caption := lisMenuOpenPackage;
@ -1138,6 +1135,15 @@ begin
{$IFDEF EnablePkgs}
mnuComponents.Add(itmPkgPkgGraph);
{$ENDIF}
{$IFDEF EnablePkgs}
mnuComponents.Add(CreateMenuSeparator);
{$ENDIF}
itmCompsConfigCustomComps := TMenuItem.Create(Self);
itmCompsConfigCustomComps.Name:='itmCompsConfigCustomComps';
itmCompsConfigCustomComps.Caption := lisMenuConfigCustomComps;
mnuComponents.Add(itmCompsConfigCustomComps);
end;
procedure TMainIDEBar.SetupToolsMenu;

View File

@ -76,6 +76,8 @@ type
function GetDefaultSaveDirectoryForFile(const Filename: string): string; virtual; abstract;
procedure LoadInstalledPackages; virtual; abstract;
procedure UpdateVisibleComponentPalette; virtual; abstract;
function OpenProjectDependencies(AProject: TProject): TModalResult; virtual; abstract;
procedure AddDefaultDependencies(AProject: TProject); virtual; abstract;
procedure AddProjectDependency(AProject: TProject; APackage: TLazPackage); virtual; abstract;

View File

@ -63,16 +63,17 @@ const
type
TIDEComponentPage = class;
TIDEComponentPalette = class;
TBaseComponentPage = class;
TBaseComponentPalette = class;
{ TIDEComponent }
{ TRegisteredComponent }
TIDEComponent = class
TRegisteredComponent = class
private
FButton: TComponent;
FComponentClass: TComponentClass;
FPage: TIDEComponentPage;
FPage: TBaseComponentPage;
FPageName: string;
public
constructor Create(TheComponentClass: TComponentClass;
@ -86,63 +87,83 @@ type
public
property ComponentClass: TComponentClass read FComponentClass;
property PageName: string read FPageName;
property Page: TIDEComponentPage read FPage write FPage;
property Page: TBaseComponentPage read FPage write FPage;
property Button: TComponent read FButton write FButton;
end;
{ TIDEComponentPage }
{ TBaseComponentPage }
TIDEComponentPage = class
TBaseComponentPage = class
private
FItems: TList; // list of TIDEComponent
FItems: TList; // list of TRegisteredComponent
FPageComponent: TComponent;
FPageName: string;
FPalette: TIDEComponentPalette;
FPalette: TBaseComponentPalette;
FPriority: TComponentPriority;
function GetItems(Index: integer): TIDEComponent;
function GetItems(Index: integer): TRegisteredComponent;
public
constructor Create(const ThePageName: string);
destructor Destroy; override;
procedure Clear;
procedure ClearButtons;
procedure ConsistencyCheck;
function Count: integer;
procedure Add(NewComponent: TIDEComponent);
procedure Remove(AComponent: TIDEComponent);
function FindComponent(const CompClassName: string): TIDEComponent;
procedure Add(NewComponent: TRegisteredComponent);
procedure Remove(AComponent: TRegisteredComponent);
function FindComponent(const CompClassName: string): TRegisteredComponent;
public
property Items[Index: integer]: TIDEComponent read GetItems; default;
property Items[Index: integer]: TRegisteredComponent read GetItems; default;
property PageName: string read FPageName;
property Palette: TIDEComponentPalette read FPalette;
property Palette: TBaseComponentPalette read FPalette;
property Priority: TComponentPriority read FPriority write FPriority;
property PageComponent: TComponent read FPageComponent write FPageComponent;
end;
{ TIDEComponentPalette }
{ TBaseComponentPalette }
TEndUpdatePaletteEvent =
procedure(Sender: TObject; PaletteChanged: boolean) of object;
TIDEComponentPalette = class
TBaseComponentPalette = class
private
FItems: TList; // list of TIDEComponentPage
function GetItems(Index: integer): TIDEComponentPage;
FItems: TList; // list of TBaseComponentPage
FOnBeginUpdate: TNotifyEvent;
FOnEndUpdate: TEndUpdatePaletteEvent;
FUpdateLock: integer;
fChanged: boolean;
function GetItems(Index: integer): TBaseComponentPage;
protected
procedure DoEndUpdate(Changed: boolean); virtual;
public
constructor Create;
destructor Destroy; override;
procedure Clear;
procedure ClearButtons;
procedure BeginUpdate(Change: boolean);
procedure EndUpdate;
function IsUpdating: boolean;
procedure ConsistencyCheck;
function Count: integer;
function GetPage(const APageName: string;
CreateIfNotExists: boolean): TIDEComponentPage;
CreateIfNotExists: boolean): TBaseComponentPage;
function IndexOfPageWithName(const APageName: string): integer;
procedure AddComponent(NewComponent: TIDEComponent);
procedure AddComponent(NewComponent: TRegisteredComponent);
function CreateNewPage(const NewPageName: string;
const Priority: TComponentPriority): TIDEComponentPage;
function FindComponent(const CompClassName: string): TIDEComponent;
const Priority: TComponentPriority): TBaseComponentPage;
function FindComponent(const CompClassName: string): TRegisteredComponent;
function CreateNewClassName(const Prefix: string): string;
public
property Items[Index: integer]: TIDEComponentPage read GetItems; default;
property Pages[Index: integer]: TBaseComponentPage read GetItems; default;
property UpdateLock: integer read FUpdateLock;
property OnBeginUpdate: TNotifyEvent read FOnBeginUpdate write FOnBeginUpdate;
property OnEndUpdate: TEndUpdatePaletteEvent read FOnEndUpdate write FOnEndUpdate;
end;
var
IDEComponentPalette: TIDEComponentPalette;
IDEComponentPalette: TBaseComponentPalette;
function ComparePriority(const p1,p2: TComponentPriority): integer;
function CompareIDEComponentByClassName(Data1, Data2: pointer): integer;
@ -166,11 +187,11 @@ end;
function CompareIDEComponentByClassName(Data1, Data2: pointer): integer;
var
Comp1: TIDEComponent;
Comp2: TIDEComponent;
Comp1: TRegisteredComponent;
Comp2: TRegisteredComponent;
begin
Comp1:=TIDEComponent(Data1);
Comp2:=TIDEComponent(Data2);
Comp1:=TRegisteredComponent(Data1);
Comp2:=TRegisteredComponent(Data2);
Result:=AnsiCompareText(Comp1.ComponentClass.Classname,
Comp2.ComponentClass.Classname);
end;
@ -182,84 +203,99 @@ begin
{$ENDIF}
end;
{ TIDEComponent }
{ TRegisteredComponent }
constructor TIDEComponent.Create(TheComponentClass: TComponentClass;
constructor TRegisteredComponent.Create(TheComponentClass: TComponentClass;
const ThePageName: string);
begin
FComponentClass:=TheComponentClass;
FPageName:=ThePageName;
end;
destructor TIDEComponent.Destroy;
destructor TRegisteredComponent.Destroy;
begin
if FPage<>nil then FPage.Remove(Self);
FreeThenNil(FButton);
inherited Destroy;
end;
procedure TIDEComponent.ConsistencyCheck;
procedure TRegisteredComponent.ConsistencyCheck;
begin
if (FComponentClass=nil) then
RaiseException('TIDEComponent.ConsistencyCheck FComponentClass=nil');
RaiseException('TRegisteredComponent.ConsistencyCheck FComponentClass=nil');
if not IsValidIdent(FComponentClass.ClassName) then
RaiseException('TIDEComponent.ConsistencyCheck not IsValidIdent(FComponentClass.ClassName)');
RaiseException('TRegisteredComponent.ConsistencyCheck not IsValidIdent(FComponentClass.ClassName)');
end;
function TIDEComponent.GetPriority: TComponentPriority;
function TRegisteredComponent.GetPriority: TComponentPriority;
begin
Result:=ComponentPriorityNormal;
end;
procedure TIDEComponent.AddToPalette;
procedure TRegisteredComponent.AddToPalette;
begin
IDEComponentPalette.AddComponent(Self);
end;
function TIDEComponent.Createable: boolean;
function TRegisteredComponent.Createable: boolean;
begin
Result:=true;
end;
{ TIDEComponentPage }
{ TBaseComponentPage }
function TIDEComponentPage.GetItems(Index: integer): TIDEComponent;
function TBaseComponentPage.GetItems(Index: integer): TRegisteredComponent;
begin
Result:=TIDEComponent(FItems[Index]);
Result:=TRegisteredComponent(FItems[Index]);
end;
constructor TIDEComponentPage.Create(const ThePageName: string);
constructor TBaseComponentPage.Create(const ThePageName: string);
begin
FPageName:=ThePageName;
FItems:=TList.Create;
end;
destructor TIDEComponentPage.Destroy;
destructor TBaseComponentPage.Destroy;
begin
Clear;
FreeThenNil(FPageComponent);
FItems.Free;
inherited Destroy;
end;
procedure TIDEComponentPage.Clear;
procedure TBaseComponentPage.Clear;
var
i: Integer;
AComponent: TRegisteredComponent;
begin
for i:=0 to FItems.Count-1 do
Items[i].Page:=nil;
for i:=0 to FItems.Count-1 do begin
AComponent:=Items[i];
FreeThenNil(AComponent.FButton);
AComponent.Page:=nil;
end;
FItems.Clear;
end;
procedure TIDEComponentPage.ConsistencyCheck;
procedure TBaseComponentPage.ClearButtons;
var
Cnt: Integer;
i: Integer;
begin
Cnt:=Count;
for i:=0 to Cnt-1 do FreeThenNil(Items[i].FButton);
end;
procedure TBaseComponentPage.ConsistencyCheck;
begin
end;
function TIDEComponentPage.Count: integer;
function TBaseComponentPage.Count: integer;
begin
Result:=FItems.Count;
end;
procedure TIDEComponentPage.Add(NewComponent: TIDEComponent);
procedure TBaseComponentPage.Add(NewComponent: TRegisteredComponent);
var
InsertIndex: Integer;
NewPriority: TComponentPriority;
@ -273,14 +309,14 @@ begin
NewComponent.Page:=Self;
end;
procedure TIDEComponentPage.Remove(AComponent: TIDEComponent);
procedure TBaseComponentPage.Remove(AComponent: TRegisteredComponent);
begin
FItems.Remove(AComponent);
AComponent.Page:=nil;
end;
function TIDEComponentPage.FindComponent(const CompClassName: string
): TIDEComponent;
function TBaseComponentPage.FindComponent(const CompClassName: string
): TRegisteredComponent;
var
i: Integer;
begin
@ -292,71 +328,107 @@ begin
Result:=nil;
end;
{ TIDEComponentPalette }
{ TBaseComponentPalette }
function TIDEComponentPalette.GetItems(Index: integer): TIDEComponentPage;
function TBaseComponentPalette.GetItems(Index: integer): TBaseComponentPage;
begin
Result:=TIDEComponentPage(FItems[Index]);
Result:=TBaseComponentPage(FItems[Index]);
end;
constructor TIDEComponentPalette.Create;
procedure TBaseComponentPalette.DoEndUpdate(Changed: boolean);
begin
if Assigned(OnEndUpdate) then OnEndUpdate(Self,Changed);
end;
constructor TBaseComponentPalette.Create;
begin
FItems:=TList.Create;
end;
destructor TIDEComponentPalette.Destroy;
destructor TBaseComponentPalette.Destroy;
begin
Clear;
FItems.Free;
inherited Destroy;
end;
procedure TIDEComponentPalette.Clear;
procedure TBaseComponentPalette.Clear;
var
i: Integer;
begin
for i:=0 to FItems.Count-1 do
Items[i].Free;
Pages[i].Free;
FItems.Clear;
end;
procedure TIDEComponentPalette.ConsistencyCheck;
procedure TBaseComponentPalette.ClearButtons;
var
Cnt: Integer;
i: Integer;
begin
Cnt:=Count;
for i:=0 to Cnt-1 do Pages[i].ClearButtons;
end;
procedure TBaseComponentPalette.BeginUpdate(Change: boolean);
begin
inc(FUpdateLock);
if FUpdateLock=1 then begin
fChanged:=Change;
if Assigned(OnBeginUpdate) then OnBeginUpdate(Self);
end else
fChanged:=fChanged or Change;
end;
procedure TBaseComponentPalette.EndUpdate;
begin
if FUpdateLock<=0 then RaiseException('TBaseComponentPalette.EndUpdate');
dec(FUpdateLock);
if FUpdateLock=0 then DoEndUpdate(fChanged);
end;
function TBaseComponentPalette.IsUpdating: boolean;
begin
Result:=FUpdateLock>0;
end;
procedure TBaseComponentPalette.ConsistencyCheck;
begin
end;
function TIDEComponentPalette.Count: integer;
function TBaseComponentPalette.Count: integer;
begin
Result:=FItems.Count;
end;
function TIDEComponentPalette.GetPage(const APageName: string;
CreateIfNotExists: boolean): TIDEComponentPage;
function TBaseComponentPalette.GetPage(const APageName: string;
CreateIfNotExists: boolean): TBaseComponentPage;
var
i: Integer;
begin
i:=IndexOfPageWithName(APageName);
if i>=0 then begin
Result:=Items[i];
Result:=Pages[i];
end else begin
Result:=TIDEComponentPage.Create(APageName);
Result:=TBaseComponentPage.Create(APageName);
Result.FPalette:=Self;
FItems.Add(Result);
end;
end;
function TIDEComponentPalette.IndexOfPageWithName(const APageName: string
function TBaseComponentPalette.IndexOfPageWithName(const APageName: string
): integer;
begin
Result:=Count-1;
while (Result>=0) and (AnsiCompareText(Items[Result].PageName,APageName)<>0)
while (Result>=0) and (AnsiCompareText(Pages[Result].PageName,APageName)<>0)
do
dec(Result);
end;
procedure TIDEComponentPalette.AddComponent(NewComponent: TIDEComponent);
procedure TBaseComponentPalette.AddComponent(NewComponent: TRegisteredComponent);
var
CurPage: TIDEComponentPage;
CurPage: TBaseComponentPage;
begin
CurPage:=GetPage(NewComponent.PageName,false);
if CurPage=nil then
@ -364,33 +436,33 @@ begin
CurPage.Add(NewComponent);
end;
function TIDEComponentPalette.CreateNewPage(const NewPageName: string;
const Priority: TComponentPriority): TIDEComponentPage;
function TBaseComponentPalette.CreateNewPage(const NewPageName: string;
const Priority: TComponentPriority): TBaseComponentPage;
var
InsertIndex: Integer;
begin
Result:=TIDEComponentPage.Create(NewPageName);
Result:=TBaseComponentPage.Create(NewPageName);
InsertIndex:=0;
while (InsertIndex<Count)
and (ComparePriority(Items[InsertIndex].Priority,Priority)>0) do
and (ComparePriority(Pages[InsertIndex].Priority,Priority)>0) do
inc(InsertIndex);
FItems.Insert(InsertIndex,Result);
Result.FPalette:=Self;
end;
function TIDEComponentPalette.FindComponent(const CompClassName: string
): TIDEComponent;
function TBaseComponentPalette.FindComponent(const CompClassName: string
): TRegisteredComponent;
var
i: Integer;
begin
for i:=0 to Count-1 do begin
Result:=Items[i].FindComponent(CompClassName);
Result:=Pages[i].FindComponent(CompClassName);
if Result<>nil then exit;
end;
Result:=nil;
end;
function TIDEComponentPalette.CreateNewClassName(const Prefix: string): string;
function TBaseComponentPalette.CreateNewClassName(const Prefix: string): string;
var
i: Integer;
begin

View File

@ -64,7 +64,7 @@ type
{ TPkgComponent }
TPkgComponent = class(TIDEComponent)
TPkgComponent = class(TRegisteredComponent)
private
FPkgFile: TPkgFile;
FIcon: TBitmap;

View File

@ -51,11 +51,13 @@ uses
PackageEditor, AddToPackageDlg, PackageDefs, PackageLinks, PackageSystem,
OpenInstalledPkgDlg, PkgGraphExplorer, BrokenDependenciesDlg, CompilerOptions,
ExtToolDialog, ExtToolEditDlg, EditDefineTree, DefineTemplates,
ProjectInspector,
ProjectInspector, ComponentPalette,
BasePkgManager, MainBar;
type
TPkgManager = class(TBasePkgManager)
procedure IDEComponentPaletteEndUpdate(Sender: TObject;
PaletteChanged: boolean);
// events
function OnPackageEditorCompilePackage(Sender: TObject;
APackage: TLazPackage; CompileAll: boolean): TModalResult;
@ -111,6 +113,8 @@ type
function GetDefaultSaveDirectoryForFile(const Filename: string): string; override;
procedure LoadInstalledPackages; override;
procedure UpdateVisibleComponentPalette; override;
function AddPackageToGraph(APackage: TLazPackage): TModalResult;
function OpenProjectDependencies(AProject: TProject): TModalResult; override;
procedure AddDefaultDependencies(AProject: TProject); override;
@ -177,6 +181,12 @@ begin
DoShowPackageGraph;
end;
procedure TPkgManager.IDEComponentPaletteEndUpdate(Sender: TObject;
PaletteChanged: boolean);
begin
UpdateVisibleComponentPalette;
end;
function TPkgManager.OnPackageEditorCompilePackage(Sender: TObject;
APackage: TLazPackage; CompileAll: boolean): TModalResult;
var
@ -865,7 +875,8 @@ end;
constructor TPkgManager.Create(TheOwner: TComponent);
begin
inherited Create(TheOwner);
IDEComponentPalette:=TIDEComponentPalette.Create;
IDEComponentPalette:=TComponentPalette.Create;
IDEComponentPalette.OnEndUpdate:=@IDEComponentPaletteEndUpdate;
PkgLinks:=TPackageLinks.Create;
PkgLinks.UpdateAll;
@ -961,9 +972,21 @@ end;
procedure TPkgManager.LoadInstalledPackages;
begin
// base packages
IDEComponentPalette.BeginUpdate(true);
// static packages
PackageGraph.AddStaticBasePackages;
PackageGraph.RegisterStaticPackages;
// dynamic packages
// ToDo
IDEComponentPalette.EndUpdate;
end;
procedure TPkgManager.UpdateVisibleComponentPalette;
begin
end;
function TPkgManager.AddPackageToGraph(APackage: TLazPackage