diff --git a/.gitattributes b/.gitattributes index e39c19a197..2e9efd6ef3 100644 --- a/.gitattributes +++ b/.gitattributes @@ -182,6 +182,7 @@ designer/sizecompsdlg.pp svneol=native#text/pascal designer/taborderdlg.lfm svneol=native#text/plain designer/taborderdlg.lrs svneol=native#text/pascal designer/taborderdlg.pas svneol=native#text/pascal +docs/ExtendingTheIDE.txt svneol=native#text/plain docs/LazarusIDEInternals.pdf -text svneol=unset#application/pdf docs/Packages.txt svneol=native#text/plain examples/bitbtnform.pp svneol=native#text/pascal diff --git a/docs/ExtendingTheIDE.txt b/docs/ExtendingTheIDE.txt new file mode 100644 index 0000000000..8134ea54f2 --- /dev/null +++ b/docs/ExtendingTheIDE.txt @@ -0,0 +1,119 @@ +Extending the IDE (Overview) +============================ + +The IDE supports several types of plugins: + +Components + These are the items in the component palette. For a example TButton can be + used to create Buttons. + +Component Editors + Component editors are used when you double click on a component in the + designer or to add some extra items to the popup menu of the designer, when + you right click on a component. + +Property Editors + These are used by the rows in the object inspector. + +Experts + These are all other types. + +------------------------------------------------------------------------------- +There are two possibilities to add your own plugins to Lazarus: + +1. Write a package, install it and register your plugins in the 'Register' + procedure of a unit. +2. Extend the lazarus code, and send your cvs diff to the lazarus mailing list. + + + +------------------------------------------------------------------------------- +Writing components: + +ToDo +Hint: Create a new component via the package editor. + + + +------------------------------------------------------------------------------- +Writing component editors: + +ToDo +Hint: see componenteditors.pas for examples + + +------------------------------------------------------------------------------- +Writing property editors + +ToDo +Hint: see propedits.pp for examples + + +------------------------------------------------------------------------------- +Register event handlers + +There are several events in the IDE, where plugins can add their own handlers. +In propedits.pp there is a GlobalDesignHook object, maintains several events +for designing. Each event calls a list of handlers. The default handlers are +added by the IDE. You can add your own handlers with the AddHandlerXXX and +RemoveHandlerXXX methods. They will be called before the default handlers. +Examples: + + Adding your handler (this is normally done in the constructor of your object): + GlobalDesignHook.AddHandlerComponentAdded(@YourOnComponentAdded); + + Removing your handler: + GlobalDesignHook.RemoveHandlerComponentAdded(@YourOnComponentAdded); + + You can remove all handlers at once. For example, it is a good idea to add + this line in the destructor of object: + GlobalDesignHook.RemoveAllHandlersForObject(Self); + + +The handlers of GlobalDesignHook: + + // lookup root + ChangeLookupRoot + Called when the LookupRoot changed. + The LookupRoot is the owner object of the currently selected components. + Normally this is a TForm. + + // methods + CreateMethod + GetMethodName + GetMethods + MethodExists + RenameMethod + ShowMethod + Called + MethodFromAncestor + ChainCall + + // components + GetComponent + GetComponentName + GetComponentNames + GetRootClassName + ComponentRenamed + Called when a component was renamed + ComponentAdded + Called when a new component was added to the LookupRoot + ComponentDeleting + Called before a component is freed. + DeleteComponent + Called by the IDE to delete a component. + GetSelectedComponents + Get the current selection of components. + + // persistent objects + GetObject + GetObjectName + GetObjectNames + + // modifing + Modified + Revert + RefreshPropertyValues + + +