mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-23 23:19:31 +02:00
MG: TNotebook is now streamable
git-svn-id: trunk@2756 -
This commit is contained in:
parent
04f8ed7cea
commit
b6a029574c
@ -103,9 +103,13 @@ const
|
||||
|
||||
procedure RegisterComponents(const Page,UnitName:ShortString;
|
||||
ComponentClasses: array of TComponentClass);
|
||||
function FindRegsiteredComponentClass(
|
||||
const AClassName: string): TRegisteredComponent;
|
||||
|
||||
var
|
||||
RegCompList:TRegisteredComponentList;
|
||||
|
||||
|
||||
|
||||
implementation
|
||||
|
||||
@ -123,6 +127,14 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
function FindRegsiteredComponentClass(
|
||||
const AClassName: string): TRegisteredComponent;
|
||||
begin
|
||||
Result:=nil;
|
||||
if RegCompList<>nil then begin
|
||||
Result:=RegCompList.FindComponentClassByName(AClassName);
|
||||
end;
|
||||
end;
|
||||
|
||||
{ TRegisteredComponent }
|
||||
|
||||
|
@ -31,25 +31,33 @@ unit FormEditor;
|
||||
interface
|
||||
|
||||
uses
|
||||
classes, customformeditor,Controls, forms,buttons,sysutils,Graphics,Extctrls;
|
||||
Classes, CustomFormEditor, Controls, Forms, Buttons, SysUtils, Graphics,
|
||||
ExtCtrls, ObjectInspector;
|
||||
|
||||
type
|
||||
|
||||
TFormEditor = class(TCustomFormEditor)
|
||||
private
|
||||
|
||||
protected
|
||||
procedure SetObj_Inspector(AnObjectInspector: TObjectInspector); override;
|
||||
public
|
||||
constructor Create;
|
||||
destructor destroy; override;
|
||||
destructor Destroy; override;
|
||||
end;
|
||||
|
||||
|
||||
var
|
||||
FormEditor1 : TFormEditor;
|
||||
|
||||
|
||||
implementation
|
||||
|
||||
|
||||
procedure TFormEditor.SetObj_Inspector(AnObjectInspector: TObjectInspector);
|
||||
begin
|
||||
if AnObjectInspector=Obj_Inspector then exit;
|
||||
|
||||
inherited SetObj_Inspector(AnObjectInspector);
|
||||
|
||||
end;
|
||||
|
||||
constructor TFormEditor.Create;
|
||||
Begin
|
||||
inherited;
|
||||
|
133
ide/main.pp
133
ide/main.pp
@ -46,12 +46,12 @@ uses
|
||||
Buttons, Menus, ComCtrls, Spin, Project, SysUtils, FileCtrl, Controls,
|
||||
Graphics, GraphType, ExtCtrls, Dialogs, LazConf, CompReg, CodeToolManager,
|
||||
CodeCache, DefineTemplates, MsgView, NewProjectDlg, IDEComp,
|
||||
AbstractFormEditor, Designer, FormEditor, CustomFormEditor, ObjectInspector,
|
||||
PropEdits, ControlSelection, UnitEditor, CompilerOptions, EditorOptions,
|
||||
EnvironmentOpts, TransferMacros, SynEditKeyCmds, KeyMapping, ProjectOpts,
|
||||
IDEProcs, Process, UnitInfoDlg, Debugger, DBGOutputForm, GDBMIDebugger,
|
||||
RunParamsOpts, ExtToolDialog, ExtToolEditDlg, MacroPromptDlg, LMessages,
|
||||
ProjectDefs, Watchesdlg, BreakPointsdlg, ColumnDlg, OutputFilter,
|
||||
AbstractFormEditor, Designer, FormEditor, CustomFormEditor,
|
||||
ObjectInspector, PropEdits, ControlSelection, UnitEditor, CompilerOptions,
|
||||
EditorOptions, EnvironmentOpts, TransferMacros, SynEditKeyCmds, KeyMapping,
|
||||
ProjectOpts, IDEProcs, Process, UnitInfoDlg, Debugger, DBGOutputForm,
|
||||
GDBMIDebugger, RunParamsOpts, ExtToolDialog, ExtToolEditDlg, MacroPromptDlg,
|
||||
LMessages, ProjectDefs, Watchesdlg, BreakPointsdlg, ColumnDlg, OutputFilter,
|
||||
BuildLazDialog, MiscOptions, EditDefineTree, CodeToolsOptions, TypInfo,
|
||||
IDEOptionDefs, CodeToolsDefines, LocalsDlg, DebuggerDlg, InputHistory,
|
||||
DiskDiffsDialog,
|
||||
@ -190,8 +190,6 @@ type
|
||||
|
||||
|
||||
// ObjectInspector + PropertyEditorHook events
|
||||
procedure OIOnAddAvailableComponent(AComponent:TComponent;
|
||||
var Allowed:boolean);
|
||||
procedure OIOnSelectComponent(AComponent:TComponent);
|
||||
procedure OnPropHookGetMethods(TypeData:PTypeData; Proc:TGetStringProc);
|
||||
function OnPropHookMethodExists(const AMethodName:ShortString;
|
||||
@ -202,6 +200,8 @@ type
|
||||
procedure OnPropHookShowMethod(const AMethodName:ShortString);
|
||||
procedure OnPropHookRenameMethod(const CurName, NewName:ShortString);
|
||||
procedure OnPropHookComponentRenamed(AComponent: TComponent);
|
||||
procedure OnPropHookComponentAdded(AComponent: TComponent; Select: boolean);
|
||||
procedure OnPropHookDeleteComponent(AComponent: TComponent);
|
||||
|
||||
// designer events
|
||||
procedure OnDesignerGetSelectedComponentClass(Sender: TObject;
|
||||
@ -211,13 +211,14 @@ type
|
||||
Value: boolean);
|
||||
procedure OnDesignerComponentListChanged(Sender: TObject);
|
||||
procedure OnDesignerPropertiesChanged(Sender: TObject);
|
||||
procedure OnDesignerAddComponent(Sender: TObject; Component: TComponent;
|
||||
ComponentClass: TRegisteredComponent);
|
||||
procedure OnDesignerRemoveComponent(Sender: TObject; Component: TComponent);
|
||||
procedure OnDesignerComponentAdded(Sender: TObject; AComponent: TComponent;
|
||||
AComponentClass: TRegisteredComponent);
|
||||
procedure OnDesignerRemoveComponent(Sender: TObject; AComponent: TComponent);
|
||||
procedure OnDesignerModified(Sender: TObject);
|
||||
Procedure OnDesignerActivated(Sender : TObject);
|
||||
procedure OnDesignerRenameComponent(ADesigner: TDesigner;
|
||||
AComponent: TComponent; const NewName: string);
|
||||
|
||||
procedure OnControlSelectionChanged(Sender: TObject);
|
||||
|
||||
// Environment options dialog events
|
||||
@ -722,12 +723,6 @@ begin
|
||||
writeln('[TMainIDE.Destroy] END');
|
||||
end;
|
||||
|
||||
procedure TMainIDE.OIOnAddAvailableComponent(AComponent:TComponent;
|
||||
var Allowed:boolean);
|
||||
begin
|
||||
//Allowed:=(not (AComponent is TGrabber));
|
||||
end;
|
||||
|
||||
procedure TMainIDE.OIOnSelectComponent(AComponent:TComponent);
|
||||
begin
|
||||
with TheControlSelection do begin
|
||||
@ -991,7 +986,6 @@ end;
|
||||
procedure TMainIDE.SetupObjectInspector;
|
||||
begin
|
||||
ObjectInspector1 := TObjectInspector.Create(Self);
|
||||
ObjectInspector1.OnAddAvailComponent:=@OIOnAddAvailableComponent;
|
||||
ObjectInspector1.OnSelectComponentInOI:=@OIOnSelectComponent;
|
||||
PropertyEditorHook1:=TPropertyEditorHook.Create;
|
||||
PropertyEditorHook1.OnGetMethods:=@OnPropHookGetMethods;
|
||||
@ -1000,6 +994,7 @@ begin
|
||||
PropertyEditorHook1.OnShowMethod:=@OnPropHookShowMethod;
|
||||
PropertyEditorHook1.OnRenameMethod:=@OnPropHookRenameMethod;
|
||||
PropertyEditorHook1.OnComponentRenamed:=@OnPropHookComponentRenamed;
|
||||
PropertyEditorHook1.OnComponentAdded:=@OnPropHookComponentAdded;
|
||||
ObjectInspector1.PropertyEditorHook:=PropertyEditorHook1;
|
||||
EnvironmentOptions.IDEWindowLayoutList.Apply(TForm(ObjectInspector1),
|
||||
DefaultObjectInspectorName);
|
||||
@ -1759,13 +1754,13 @@ Begin
|
||||
writeln('[TMainIDE.SetDefaultsforForm] B');
|
||||
{$ENDIF}
|
||||
with TDesigner(aForm.Designer) do begin
|
||||
FormEditor := FormEditor1;
|
||||
TheFormEditor := FormEditor1;
|
||||
OnGetSelectedComponentClass:=@OnDesignerGetSelectedComponentClass;
|
||||
OnUnselectComponentClass:=@OnDesignerUnselectComponentClass;
|
||||
OnSetDesigning:=@OnDesignerSetDesigning;
|
||||
OnComponentListChanged:=@OnDesignerComponentListChanged;
|
||||
OnPropertiesChanged:=@OnDesignerPropertiesChanged;
|
||||
OnAddComponent:=@OnDesignerAddComponent;
|
||||
OnComponentAdded:=@OnDesignerComponentAdded;
|
||||
OnRemoveComponent:=@OnDesignerRemoveComponent;
|
||||
OnGetNonVisualCompIconCanvas:=@IDECompList.OnGetNonVisualCompIconCanvas;
|
||||
OnModified:=@OnDesignerModified;
|
||||
@ -5518,46 +5513,42 @@ begin
|
||||
ObjectInspector1.RefreshPropertyValues;
|
||||
end;
|
||||
|
||||
procedure TMainIDE.OnDesignerAddComponent(Sender: TObject;
|
||||
Component: TComponent; ComponentClass: TRegisteredComponent);
|
||||
procedure TMainIDE.OnDesignerComponentAdded(Sender: TObject;
|
||||
AComponent: TComponent; AComponentClass: TRegisteredComponent);
|
||||
var i: integer;
|
||||
ActiveForm: TCustomForm;
|
||||
ActiveUnitInfo: TUnitInfo;
|
||||
FormClassName: string;
|
||||
begin
|
||||
if not (Sender is TDesigner) then begin
|
||||
writeln('TMainIDE.OnDesignerComponentAdded ERROR: Sender.ClassName=',
|
||||
Sender.ClassName);
|
||||
exit;
|
||||
end;
|
||||
ActiveForm:=TDesigner(Sender).Form;
|
||||
if ActiveForm=nil then begin
|
||||
writeln('[TMainIDE.OnDesignerAddComponent] Error: TDesigner without a form');
|
||||
halt;
|
||||
end;
|
||||
// find source for form
|
||||
i:=Project1.UnitCount-1;
|
||||
while (i>=0) do begin
|
||||
if (Project1.Units[i].Loaded)
|
||||
and (Project1.Units[i].Form=ActiveForm) then break;
|
||||
dec(i);
|
||||
end;
|
||||
i:=Project1.IndexOfUnitWithForm(ActiveForm,false,nil);
|
||||
if i<0 then begin
|
||||
writeln('[TMainIDE.OnDesignerAddComponent] Error: form without source');
|
||||
halt;
|
||||
raise Exception.Create('[TMainIDE.OnDesignerComponentAdded] Error: '
|
||||
+'form without source');
|
||||
end;
|
||||
ActiveUnitInfo:=Project1.Units[i];
|
||||
|
||||
// add needed unit to source
|
||||
CodeToolBoss.AddUnitToMainUsesSection(ActiveUnitInfo.Source,
|
||||
ComponentClass.UnitName,'');
|
||||
AComponentClass.UnitName,'');
|
||||
// add component definition to form source
|
||||
FormClassName:=ActiveForm.ClassName;
|
||||
if not CodeToolBoss.PublishedVariableExists(ActiveUnitInfo.Source,
|
||||
FormClassName,Component.Name) then begin
|
||||
FormClassName,AComponent.Name) then begin
|
||||
// ! AddPublishedVariable does not rebuild the CodeTree, so we need
|
||||
// PublishedVariableExists before !
|
||||
CodeToolBoss.AddPublishedVariable(ActiveUnitInfo.Source,FormClassName,
|
||||
Component.Name, Component.ClassName);
|
||||
AComponent.Name, AComponent.ClassName);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TMainIDE.OnDesignerRemoveComponent(Sender: TObject;
|
||||
Component: TComponent);
|
||||
AComponent: TComponent);
|
||||
var i: integer;
|
||||
ActiveForm: TCustomForm;
|
||||
ActiveUnitInfo: TUnitInfo;
|
||||
@ -5569,12 +5560,7 @@ begin
|
||||
halt;
|
||||
end;
|
||||
// find source for form
|
||||
i:=Project1.UnitCount-1;
|
||||
while (i>=0) do begin
|
||||
if (Project1.Units[i].Loaded)
|
||||
and (Project1.Units[i].Form=ActiveForm) then break;
|
||||
dec(i);
|
||||
end;
|
||||
i:=Project1.IndexOfUnitWithForm(ActiveForm,false,nil);
|
||||
if i<0 then begin
|
||||
writeln('[TMainIDE.OnDesignerAddComponent] Error: form without source');
|
||||
halt;
|
||||
@ -5583,7 +5569,7 @@ begin
|
||||
// remove component definition to form source
|
||||
FormClassName:=ActiveForm.ClassName;
|
||||
CodeToolBoss.RemovePublishedVariable(ActiveUnitInfo.Source,FormClassName,
|
||||
Component.Name);
|
||||
AComponent.Name);
|
||||
end;
|
||||
|
||||
procedure TMainIDE.OnDesignerModified(Sender: TObject);
|
||||
@ -5596,7 +5582,7 @@ begin
|
||||
if Project1.Units[i].Loaded then
|
||||
SrcEdit:=SourceNotebook.FindSourceEditorWithPageIndex(
|
||||
Project1.Units[i].EditorIndex);
|
||||
if SrcEdit<>nil then SrcEdit.EditorComponent.Modified:=true;
|
||||
if SrcEdit<>nil then SrcEdit.Modified:=true;
|
||||
end;
|
||||
end;
|
||||
|
||||
@ -6595,6 +6581,56 @@ begin
|
||||
ObjectInspector1.FillComponentComboBox;
|
||||
end;
|
||||
|
||||
{-------------------------------------------------------------------------------
|
||||
procedure TMainIDE.OnPropHookComponentAdded(AComponent: TComponent;
|
||||
Select: boolean);
|
||||
|
||||
This handler is called whenever a new component was added to a designed form
|
||||
and should be added to form source
|
||||
-------------------------------------------------------------------------------}
|
||||
procedure TMainIDE.OnPropHookComponentAdded(AComponent: TComponent;
|
||||
Select: boolean);
|
||||
var
|
||||
ComponentClass: TRegisteredComponent;
|
||||
ADesigner: TIDesigner;
|
||||
begin
|
||||
writeln('TMainIDE.OnPropHookComponentAdded A ',AComponent.Name,':',AComponent.ClassName);
|
||||
ComponentClass:=FindRegsiteredComponentClass(AComponent.ClassName);
|
||||
if ComponentClass=nil then begin
|
||||
writeln('TMainIDE.OnPropHookComponentAdded ',AComponent.ClassName,
|
||||
' not registered');
|
||||
exit;
|
||||
end;
|
||||
// create unique name
|
||||
AComponent.Name:=FormEditor1.CreateUniqueComponentName(AComponent);
|
||||
writeln('TMainIDE.OnPropHookComponentAdded B ',AComponent.Name,':',AComponent.ClassName);
|
||||
// create component interface
|
||||
if FormEditor1.FindComponent(AComponent)=nil then
|
||||
FormEditor1.CreateComponentInterface(AComponent);
|
||||
// set component into design mode
|
||||
SetDesigning(AComponent,true);
|
||||
writeln('TMainIDE.OnPropHookComponentAdded C ',AComponent.Name,':',AComponent.ClassName);
|
||||
// add to source
|
||||
ADesigner:=FindDesigner(AComponent);
|
||||
OnDesignerComponentAdded(ADesigner,AComponent,ComponentClass);
|
||||
writeln('TMainIDE.OnPropHookComponentAdded D ',AComponent.Name,':',AComponent.ClassName,' ',Select);
|
||||
// select component
|
||||
if Select then begin
|
||||
TheControlSelection.AssignComponent(AComponent);
|
||||
end;
|
||||
writeln('TMainIDE.OnPropHookComponentAdded END ',AComponent.Name,':',AComponent.ClassName,' ',Select);
|
||||
end;
|
||||
|
||||
procedure TMainIDE.OnPropHookDeleteComponent(AComponent: TComponent);
|
||||
var
|
||||
ADesigner: TDesigner;
|
||||
begin
|
||||
writeln('TMainIDE.OnPropHookDeleteComponent A ',AComponent.Name,':',AComponent.ClassName);
|
||||
ADesigner:=TDesigner(FindDesigner(AComponent));
|
||||
if ADesigner=nil then exit;
|
||||
ADesigner.RemoveComponent(AComponent);
|
||||
end;
|
||||
|
||||
procedure TMainIDE.mnuEditCopyClicked(Sender: TObject);
|
||||
begin
|
||||
DoEditMenuCommand(ecCopy);
|
||||
@ -6740,6 +6776,9 @@ end.
|
||||
|
||||
{ =============================================================================
|
||||
$Log$
|
||||
Revision 1.361 2002/09/05 12:11:39 lazarus
|
||||
MG: TNotebook is now streamable
|
||||
|
||||
Revision 1.360 2002/09/04 09:32:15 lazarus
|
||||
MG: improved streaming error handling
|
||||
|
||||
|
@ -799,6 +799,11 @@ begin
|
||||
FontData.Handle := 0;
|
||||
end;
|
||||
|
||||
function TFont.IsNameStored: boolean;
|
||||
begin
|
||||
Result:=DefFontData.Name<>Name;
|
||||
end;
|
||||
|
||||
procedure TFont.SetData(const FontData: TFontData);
|
||||
begin
|
||||
if FFontData.Handle <> FontData.Handle then begin
|
||||
@ -849,6 +854,9 @@ end;
|
||||
{ =============================================================================
|
||||
|
||||
$Log$
|
||||
Revision 1.8 2002/09/05 12:11:43 lazarus
|
||||
MG: TNotebook is now streamable
|
||||
|
||||
Revision 1.7 2002/06/05 12:33:57 lazarus
|
||||
MG: fixed fonts in XLFD format and styles
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user