git-svn-id: https://192.168.0.254/svn/Componentes.Terceros.jvcl@12 7f62d464-2af8-f54e-996c-e91b33f51cbe
434 lines
14 KiB
ObjectPascal
434 lines
14 KiB
ObjectPascal
unit ReadPalettes;
|
|
|
|
{$I jvcl.inc}
|
|
|
|
interface
|
|
|
|
procedure Register;
|
|
|
|
implementation
|
|
|
|
uses
|
|
Classes, Controls, ComCtrls, Forms,
|
|
{$IFDEF VCL}
|
|
Dialogs,
|
|
{$ENDIF VCL}
|
|
{$IFDEF VisualCLX}
|
|
QDialogs,
|
|
{$ENDIF VisualCLX}
|
|
TypInfo, SysUtils, ActnList,
|
|
DesignIntf, ToolsAPI;
|
|
|
|
var
|
|
VisibleComponentList: TStringList;
|
|
AllComponentList: TStringList;
|
|
PropertyEditorList: TStringList;
|
|
ComponentEditorList: TStringList;
|
|
CustomModuleList: TStringList;
|
|
NoIconList: TStringList;
|
|
ActionsList: TStringList;
|
|
PackageWizardList: TStringList;
|
|
RegisterClassList: TStringList;
|
|
FullRegisterClassList: TStringList;
|
|
|
|
OldSpyRegisterPropertyEditor: TRegisterPropertyEditorProc;
|
|
OldSpyRegisterComponentEditor: TRegisterComponentEditorProc;
|
|
OldSpyRegisterCustomModule: TRegisterCustomModuleProc;
|
|
OldSpyRegisterNoIcon: procedure(ComponentClasses: array of TComponentClass);
|
|
OldSpyRegisterActions: procedure(const CategoryName: string;
|
|
const AClasses: array of TBasicActionClass; Resource: TComponentClass);
|
|
OldSpyRegisterPackageWizard: TWizardRegisterProc;
|
|
|
|
procedure SaveFile(AFileName: string; List: TStringList);
|
|
begin
|
|
with TSaveDialog.Create(nil) do
|
|
begin
|
|
DefaultExt := 'csv';
|
|
Filter := 'CSV files (*.csv)|*.csv|All files (*.*)|*.*';
|
|
FileName := AFileName;
|
|
if Execute then
|
|
List.SaveToFile(FileName);
|
|
Free;
|
|
end;
|
|
end;
|
|
|
|
procedure AddIDs(List: TStringList);
|
|
var
|
|
I: Integer;
|
|
begin
|
|
List.Sorted := False;
|
|
for I := 0 to List.Count - 1 do
|
|
List[I] := Format('%u;%s', [I+1, List[I]]);
|
|
end;
|
|
|
|
procedure AddPackageNames(List: TStringList);
|
|
var
|
|
I, J, K, N: Integer;
|
|
ModSvc: IOTAModuleServices;
|
|
Module: IOTAModule;
|
|
ModuleInfo: IOTAModuleInfo;
|
|
Proj: IOTAProject;
|
|
UnitName: string;
|
|
Flag: Boolean;
|
|
begin
|
|
ModSvc := (BorlandIDEServices as IOTAModuleServices);
|
|
for I := 0 to List.Count - 1 do
|
|
begin
|
|
UnitName := List[I];
|
|
N := Pos(';', UnitName);
|
|
while N > 0 do
|
|
begin
|
|
UnitName := Copy(UnitName, N + 1, Length(UnitName));
|
|
N := Pos(';', UnitName);
|
|
end;
|
|
UnitName := Copy(UnitName, 2, Length(UnitName) - 2);
|
|
Flag := False;
|
|
for J := 1 to ModSvc.ModuleCount - 1 do
|
|
begin
|
|
Module := ModSvc.Modules[J];
|
|
Proj := Module as IOTAProject;
|
|
for K := 0 to Proj.GetModuleCount - 1 do
|
|
begin
|
|
ModuleInfo := Proj.GetModule(K);
|
|
if UnitName = ExtractFileName(ModuleInfo.FileName) then
|
|
begin
|
|
List[I] := List[I] + ';"' + ChangeFileExt(ExtractFileName(Module.FileName), '') + '"';
|
|
Flag := True;
|
|
Break;
|
|
end;
|
|
end;
|
|
if Flag then
|
|
Break;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
procedure ReadRegisterComponents;
|
|
var
|
|
AppBuilder: TForm;
|
|
PaletteTab: TTabControl;
|
|
Palette: TCustomControl;
|
|
PropInfo: PPropInfo;
|
|
I, J: Integer;
|
|
PalToolCount: Integer;
|
|
OldPaletteIndex, OldToolIndex: Integer;
|
|
SelectedToolName: string;
|
|
LClass: TPersistentClass;
|
|
UnitName: string;
|
|
begin
|
|
AppBuilder := TForm(Application.FindComponent('AppBuilder'));
|
|
PaletteTab := TTabControl(AppBuilder.FindComponent('TabControl'));
|
|
Palette := TCustomControl(AppBuilder.FindComponent('Palette'));
|
|
|
|
PaletteTab.Visible := False;
|
|
OldPaletteIndex := PaletteTab.TabIndex;
|
|
|
|
PropInfo := GetPropInfo(Palette.ClassInfo, 'SelectedIndex');
|
|
OldToolIndex := GetOrdProp(Palette, PropInfo);
|
|
|
|
for I := 0 to PaletteTab.Tabs.Count - 1 do
|
|
begin
|
|
PaletteTab.TabIndex := I;
|
|
PaletteTab.OnChange(PaletteTab);
|
|
PropInfo := GetPropInfo(Palette.ClassInfo, 'PalToolCount');
|
|
PalToolCount := GetOrdProp(Palette, PropInfo);
|
|
for J := 0 to PalToolCount - 1 do
|
|
begin
|
|
PropInfo := GetPropInfo(Palette.ClassInfo, 'SelectedIndex');
|
|
SetOrdProp(Palette, PropInfo, J);
|
|
PropInfo := GetPropInfo(Palette.ClassInfo, 'SelectedToolName');
|
|
SelectedToolName := GetStrProp(Palette, PropInfo);
|
|
LClass := GetClass(SelectedToolName);
|
|
if (LClass = nil) or (LClass.ClassInfo = nil) then
|
|
UnitName := ''
|
|
else
|
|
UnitName := GetTypeData(LClass.ClassInfo).UnitName + '.pas';
|
|
if (Pos('Jv', PaletteTab.Tabs[I]) = 1) or (Pos('JV', PaletteTab.Tabs[I]) = 1) then
|
|
VisibleComponentList.Add(Format('"%s";"%s";"%s"', [SelectedToolName, PaletteTab.Tabs[I], UnitName]));
|
|
end;
|
|
end;
|
|
PaletteTab.TabIndex := OldPaletteIndex;
|
|
PaletteTab.OnChange(PaletteTab);
|
|
PropInfo := GetPropInfo(Palette.ClassInfo, 'SelectedIndex');
|
|
SetOrdProp(Palette, PropInfo, OldToolIndex);
|
|
PaletteTab.Visible := True;
|
|
end;
|
|
|
|
type
|
|
TCarrier = class(TObject)
|
|
public
|
|
procedure GetClassCallback(AClass: TPersistentClass);
|
|
end;
|
|
|
|
procedure TCarrier.GetClassCallback(AClass: TPersistentClass);
|
|
var
|
|
UnitName: string;
|
|
begin
|
|
if Pos('TJv', AClass.ClassName) = 1 then
|
|
begin
|
|
if AClass.ClassInfo = nil then
|
|
UnitName := ''
|
|
else
|
|
UnitName := GetTypeData(AClass.ClassInfo).UnitName + '.pas';
|
|
RegisterClassList.Add(Format('"%s";"%s"', [AClass.ClassName, UnitName]));
|
|
end;
|
|
end;
|
|
|
|
procedure ReadRegisterClass;
|
|
var
|
|
Carrier: TCarrier;
|
|
begin
|
|
Carrier := TCarrier.Create;
|
|
with TClassFinder.Create(nil, True) do
|
|
begin
|
|
GetClasses(Carrier.GetClassCallback);
|
|
Free;
|
|
end;
|
|
Carrier.Free;
|
|
end;
|
|
|
|
procedure SpyRegisterComponentEditor(ComponentClass: TComponentClass; ComponentEditor: TComponentEditorClass);
|
|
begin
|
|
if Assigned(ComponentClass) and Assigned(ComponentEditor) then
|
|
if Pos('TJv', ComponentEditor.ClassName) = 1 then
|
|
ComponentEditorList.Add(Format('"%s";"%s"',
|
|
[ComponentClass.ClassName, ComponentEditor.ClassName]));
|
|
if Assigned(OldSpyRegisterComponentEditor) then
|
|
OldSpyRegisterComponentEditor(ComponentClass, ComponentEditor);
|
|
end;
|
|
|
|
procedure SpyRegisterPropertyEditor(PropertyType: PTypeInfo;
|
|
ComponentClass: TClass; const PropertyName: string;
|
|
EditorClass: TPropertyEditorClass);
|
|
begin
|
|
if Assigned(PropertyType) and Assigned(ComponentClass) and Assigned(EditorClass) then
|
|
if Pos('TJv', EditorClass.ClassName) = 1 then
|
|
PropertyEditorList.Add(Format('"%s";"%s";"%s";"%s"',
|
|
[PropertyType^.Name, ComponentClass.ClassName, PropertyName, EditorClass.ClassName]));
|
|
if Assigned(OldSpyRegisterPropertyEditor) then
|
|
OldSpyRegisterPropertyEditor(PropertyType, ComponentClass, PropertyName, EditorClass);
|
|
end;
|
|
|
|
procedure SpyRegisterCustomModule(Group: Integer;
|
|
ComponentBaseClass: TComponentClass; CustomModuleClass: TCustomModuleClass);
|
|
var
|
|
UnitName: string;
|
|
begin
|
|
if Assigned(OldSpyRegisterCustomModule) then
|
|
OldSpyRegisterCustomModule(Group, ComponentBaseClass, CustomModuleClass);
|
|
if Assigned(ComponentBaseClass) and Assigned(CustomModuleClass) then
|
|
begin
|
|
if ComponentBaseClass.ClassInfo = nil then
|
|
UnitName := ''
|
|
else
|
|
UnitName := GetTypeData(ComponentBaseClass.ClassInfo).UnitName + '.pas';
|
|
CustomModuleList.Add(Format('"%s";"%s";"%s"',
|
|
[ComponentBaseClass.ClassName, CustomModuleClass.ClassName, UnitName]));
|
|
end;
|
|
end;
|
|
|
|
procedure SpyRegisterNoIcon(ComponentClasses: array of TComponentClass);
|
|
var
|
|
I: Integer;
|
|
UnitName: string;
|
|
begin
|
|
if Assigned(OldSpyRegisterNoIcon) then
|
|
OldSpyRegisterNoIcon(ComponentClasses);
|
|
for I := Low(ComponentClasses) to High(ComponentClasses) do
|
|
begin
|
|
if ComponentClasses[I].ClassInfo = nil then
|
|
UnitName := ''
|
|
else
|
|
UnitName := GetTypeData(ComponentClasses[I].ClassInfo).UnitName + '.pas';
|
|
NoIconList.Add(Format('"%s";"%s"', [ComponentClasses[I].ClassName, UnitName]));
|
|
end;
|
|
end;
|
|
|
|
procedure SpyRegisterActions(const CategoryName: string;
|
|
const AClasses: array of TBasicActionClass; Resource: TComponentClass);
|
|
var
|
|
I: Integer;
|
|
UnitName: string;
|
|
begin
|
|
if Assigned(OldSpyRegisterActions) then
|
|
OldSpyRegisterActions(CategoryName, AClasses, Resource);
|
|
for I := Low(AClasses) to High(AClasses) do
|
|
begin
|
|
if AClasses[I].ClassInfo = nil then
|
|
UnitName := ''
|
|
else
|
|
UnitName := GetTypeData(AClasses[I].ClassInfo).UnitName + '.pas';
|
|
if Assigned(Resource) then
|
|
ActionsList.Add(Format('"%s";"%s";"%s";"%s"', [AClasses[I].ClassName, CategoryName, Resource.ClassName, UnitName]))
|
|
else
|
|
ActionsList.Add(Format('"%s";"%s";"";"%s"', [AClasses[I].ClassName, CategoryName, UnitName]));
|
|
end;
|
|
end;
|
|
|
|
procedure CleanList(DeleterList, DeletedList: TStringList);
|
|
var
|
|
I, J: Integer;
|
|
S: string;
|
|
begin
|
|
for I := 0 to DeleterList.Count - 1 do
|
|
begin
|
|
J := Pos(';', DeleterList[I]);
|
|
S := Copy(DeleterList[I], 1, J - 1);
|
|
for J := 0 to DeletedList.Count - 1 do
|
|
if Pos(S, DeletedList[J]) = 1 then
|
|
begin
|
|
DeletedList.Delete(J);
|
|
Break;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
function SpyRegisterPackageWizard(const Wizard: IOTAWizard): Boolean;
|
|
begin
|
|
Result := False;
|
|
if Assigned(OldSpyRegisterPackageWizard) then
|
|
Result := OldSpyRegisterPackageWizard(Wizard);
|
|
if Pos('JVCL.', Wizard.GetIDString) = 1 then
|
|
PackageWizardList.Add(Format('"%s";"%s"', [Wizard.GetName, Wizard.GetIDString]));
|
|
end;
|
|
|
|
procedure ReadReadRegisterComponentsByOTA;
|
|
var
|
|
Pkg: IOTAPackageServices;
|
|
I, J, N: Integer;
|
|
begin
|
|
Pkg := (BorlandIDEServices as IOTAPackageServices);
|
|
N := 1;
|
|
for I := 0 to Pkg.PackageCount - 1 do
|
|
if (Pos('jv', Pkg.PackageNames[I]) = 1) or (Pos('Jv', Pkg.PackageNames[I]) = 1) then
|
|
for J := 0 to Pkg.ComponentCount[I] - 1 do
|
|
begin
|
|
AllComponentList.Add(Format('%u;"%s";"%s"', [N, Pkg.PackageNames[I], Pkg.ComponentNames[I, J]]));
|
|
Inc(N);
|
|
end;
|
|
SaveFile('All JVCL components.csv', AllComponentList);
|
|
end;
|
|
|
|
procedure ReadModulesByOTA;
|
|
var
|
|
I: Integer;
|
|
ModSvc: IOTAModuleServices;
|
|
List: TStringList;
|
|
begin
|
|
List := TStringList.Create;
|
|
ModSvc := (BorlandIDEServices as IOTAModuleServices);
|
|
for I := 0 to ModSvc.ModuleCount - 1 do
|
|
List.Add(ModSvc.Modules[I].FileName + ' ' + ModSvc.Modules[I].FileSystem);
|
|
|
|
SaveFile('modules.csv', List);
|
|
List.Free;
|
|
end;
|
|
|
|
procedure Register;
|
|
begin
|
|
ReadRegisterComponents;
|
|
end;
|
|
|
|
initialization
|
|
VisibleComponentList := TStringList.Create;
|
|
AllComponentList := TStringList.Create;
|
|
PropertyEditorList := TStringList.Create;
|
|
PropertyEditorList.Duplicates := dupIgnore;
|
|
PropertyEditorList.Sorted := True;
|
|
ComponentEditorList := TStringList.Create;
|
|
ComponentEditorList.Duplicates := dupIgnore;
|
|
ComponentEditorList.Sorted := True;
|
|
CustomModuleList := TStringList.Create;
|
|
CustomModuleList.Duplicates := dupIgnore;
|
|
CustomModuleList.Sorted := True;
|
|
NoIconList := TStringList.Create;
|
|
NoIconList.Duplicates := dupIgnore;
|
|
NoIconList.Sorted := True;
|
|
ActionsList := TStringList.Create;
|
|
ActionsList.Duplicates := dupIgnore;
|
|
ActionsList.Sorted := True;
|
|
PackageWizardList := TStringList.Create;
|
|
PackageWizardList.Duplicates := dupIgnore;
|
|
PackageWizardList.Sorted := True;
|
|
RegisterClassList := TStringList.Create;
|
|
RegisterClassList.Duplicates := dupIgnore;
|
|
RegisterClassList.Sorted := True;
|
|
FullRegisterClassList := TStringList.Create;
|
|
|
|
OldSpyRegisterPropertyEditor := RegisterPropertyEditorProc;
|
|
RegisterPropertyEditorProc := SpyRegisterPropertyEditor;
|
|
OldSpyRegisterComponentEditor := RegisterComponentEditorProc;
|
|
RegisterComponentEditorProc := SpyRegisterComponentEditor;
|
|
OldSpyRegisterCustomModule := RegisterCustomModuleProc;
|
|
RegisterCustomModuleProc := SpyRegisterCustomModule;
|
|
OldSpyRegisterNoIcon := RegisterNoIconProc;
|
|
RegisterNoIconProc := SpyRegisterNoIcon;
|
|
OldSpyRegisterActions := RegisterActionsProc;
|
|
RegisterActionsProc := SpyRegisterActions;
|
|
OldSpyRegisterPackageWizard := LibraryWizardProc;
|
|
LibraryWizardProc := SpyRegisterPackageWizard;
|
|
|
|
finalization
|
|
RegisterPropertyEditorProc := OldSpyRegisterPropertyEditor;
|
|
RegisterComponentEditorProc := OldSpyRegisterComponentEditor;
|
|
RegisterCustomModuleProc := OldSpyRegisterCustomModule;
|
|
RegisterNoIconProc := OldSpyRegisterNoIcon;
|
|
RegisterActionsProc := OldSpyRegisterActions;
|
|
LibraryWizardProc := OldSpyRegisterPackageWizard;
|
|
|
|
CleanList(ActionsList, NoIconList);
|
|
ReadRegisterClass;
|
|
FullRegisterClassList.Assign(RegisterClassList);
|
|
CleanList(VisibleComponentList, RegisterClassList);
|
|
CleanList(NoIconList, RegisterClassList);
|
|
CleanList(ActionsList, RegisterClassList);
|
|
CleanList(CustomModuleList, RegisterClassList);
|
|
|
|
AddIDs(VisibleComponentList);
|
|
AddIDs(PropertyEditorList);
|
|
AddIDs(ComponentEditorList);
|
|
AddIDs(CustomModuleList);
|
|
AddIDs(NoIconList);
|
|
AddIDs(ActionsList);
|
|
AddIDs(PackageWizardList);
|
|
AddIDs(RegisterClassList);
|
|
AddIDs(FullRegisterClassList);
|
|
|
|
AddPackageNames(CustomModuleList);
|
|
AddPackageNames(NoIconList);
|
|
AddPackageNames(ActionsList);
|
|
AddPackageNames(VisibleComponentList);
|
|
AddPackageNames(RegisterClassList);
|
|
AddPackageNames(FullRegisterClassList);
|
|
|
|
VisibleComponentList.Insert(0, '"ID";"Component";"Palette";"FileName";"JVCLPackage"');
|
|
PropertyEditorList.Insert(0, '"ID";"PropertyType_Name";"ComponentClass_ClassName";"PropertyName";"EditorClass_ClassName"');
|
|
ComponentEditorList.Insert(0, '"ID";"ComponentClass_ClassName";"ComponentEditor_ClassName"');
|
|
CustomModuleList.Insert(0, '"ID";"ComponentBaseClass_ClassName";"CustomModuleClass_ClassName";"FileName";"JVCLPackage"');
|
|
NoIconList.Insert(0, '"ID";"ClassName";"FileName";"JVCLPackage"');
|
|
ActionsList.Insert(0, '"ID";"ClassName";"CategoryName";"Resource_ClassName";"FileName";"JVCLPackage"');
|
|
PackageWizardList.Insert(0, '"ID";"WizardName";"WizardIDString"');
|
|
RegisterClassList.Insert(0, '"ID";"ClassName";"FileName";"JVCLPackage"');
|
|
FullRegisterClassList.Insert(0, '"ID";"ClassName";"FileName";"JVCLPackage"');
|
|
SaveFile('JVCL Visible Components.csv', VisibleComponentList);
|
|
SaveFile('JVCL Property Editors.csv', PropertyEditorList);
|
|
SaveFile('JVCL Component Editors.csv', ComponentEditorList);
|
|
SaveFile('JVCL Custom Modules.csv', CustomModuleList);
|
|
SaveFile('JVCL No Icon Components.csv', NoIconList);
|
|
SaveFile('JVCL Actions.csv', ActionsList);
|
|
SaveFile('JVCL Package Wizards.csv', PackageWizardList);
|
|
SaveFile('JVCL Registered Classes.csv', RegisterClassList);
|
|
SaveFile('JVCL All Registered Classes.csv', FullRegisterClassList);
|
|
FreeAndNil(VisibleComponentList);
|
|
FreeAndNil(AllComponentList);
|
|
FreeAndNil(PropertyEditorList);
|
|
FreeAndNil(ComponentEditorList);
|
|
FreeAndNil(CustomModuleList);
|
|
FreeAndNil(NoIconList);
|
|
FreeAndNil(ActionsList);
|
|
FreeAndNil(PackageWizardList);
|
|
FreeAndNil(RegisterClassList);
|
|
FreeAndNil(FullRegisterClassList);
|
|
|
|
end.
|