Sign in Join
Wiki copytemporary

IDE Development: what changed

Revision 2 to 3. Removed lines have a minus sign; added lines have a plus sign.

OldNewLine
1-This page contains notes for lazarus core developers about ongoing development.
2-
3-Note: This paragraph is referenced by
4-
5- * [[Lazarus 0.9.26 release notes]]
6- * [[Lazarus 0.9.28 release notes]]
7- * [[Lazarus 0.9.30 release notes]]
8- * [[Lazarus 1.0 release notes]]
9- * [[Lazarus 1.2.0 release notes]]
10- * [[Lazarus 1.4.0 release notes]]
1+This page contains notes for lazarus core developers about ongoing development.
112
12-## Contents
3+Note: This paragraph is referenced by
134
14- * 1 Multi form properties / using DataModules from other forms in the designer
15- * 1.1 Short Description
16- * 1.2 Working
17- * 1.3 ToDo
18- * 2 Translations, i18n, lrt files, po files
19- * 2.1 Short Description
20- * 2.2 Working
21- * 2.3 ToDo
22- * 3 Frames
23- * 3.1 Short Description
24- * 3.2 Working
25- * 3.3 ToDo
26- * 4 VFI - Visual Form Inheritance
27- * 4.1 Short Description
28- * 4.2 Working
29- * 4.3 ToDo
30- * 5 The jedi code formatter
31- * 5.1 Short Description
32- * 5.2 Working
33- * 5.3 ToDo
34- * 6 Debugger
35- * 6.1 Short Description
36- * 6.2 Working
37- * 6.3 ToDo
38- * 7 Release Notes
5+- [[Lazarus 0.9.26 release notes]]
6+- [[Lazarus 0.9.28 release notes]]
7+- [[Lazarus 0.9.30 release notes]]
8+- [[Lazarus 1.0 release notes]]
9+- [[Lazarus 1.2.0 release notes]]
10+- [[Lazarus 1.4.0 release notes]]
3911
4012# Multi form properties / using DataModules from other forms in the designer
4113
4214## Short Description
4315
44-This feature allows to use components of other designer forms. A common example is to use the TDataSource on a DataModule for the DataSource property of a db control. Designer forms can only reference each other if they have a CreateForm statement in the lpr file (Project Options / Forms).
16+This feature allows to use components of other designer forms. A common example is to use the TDataSource on a DataModule for the DataSource property of a db control. Designer forms can only reference each other if they have a CreateForm statement in the lpr file (Project Options / Forms).
4517
4618## Working
4719
48- * Manual referencing via source code works.
49- * TPersistentPropertyEditor.GetValues - List all possible values. Check for class compatibility and if the target form is listed in the CreateForm statements of the lpr file and if the target unit does not belong to a package that will conflict if used.
50- * TPersistentPropertyEditor.GetValue - Show component path
51- * TPersistentPropertyEditor.SetValue - search the component via the given path
52- * When component is deleted, the property must be set to nil - This is not the job of the IDE, but should be achieved by the normal TComponent FreeNotification feature. Maybe eventually a check could be added, if this is implemented properly and force a nil on error.
53- * When a component is renamed the property does not need to be updated, because the form is open and use the pointer not the name. But the designer must be flagged 'modified', because the lfm has changed. See below.
54- * When reference form is opened, then target forms are opened too.
55- * When target form is closed, then only the designer is closed. The component is kept hidden.
56- * When all referring forms are closed/hidden, the hidden component will be automatically freed.
57- * Circle dependencies are allowed.
58- * When referenced component is renamed, the using units must be set modified.
59- * When referenced component is deleted, the using units must be set modified.
60- * Opening a unit now checks if designer is already created
61- * Reopen/Revert a form - all connected forms are now closed
20+- Manual referencing via source code works.
21+- TPersistentPropertyEditor.GetValues - List all possible values. Check for class compatibility and if the target form is listed in the CreateForm statements of the lpr file and if the target unit does not belong to a package that will conflict if used.
22+- TPersistentPropertyEditor.GetValue - Show component path
23+- TPersistentPropertyEditor.SetValue - search the component via the given path
24+- When component is deleted, the property must be set to nil - This is not the job of the IDE, but should be achieved by the normal TComponent FreeNotification feature. Maybe eventually a check could be added, if this is implemented properly and force a nil on error.
25+- When a component is renamed the property does not need to be updated, because the form is open and use the pointer not the name. But the designer must be flagged 'modified', because the lfm has changed. See below.
26+- When reference form is opened, then target forms are opened too.
27+- When target form is closed, then only the designer is closed. The component is kept hidden.
28+- When all referring forms are closed/hidden, the hidden component will be automatically freed.
29+- Circle dependencies are allowed.
30+- When referenced component is renamed, the using units must be set modified.
31+- When referenced component is deleted, the using units must be set modified.
32+- Opening a unit now checks if designer is already created
33+- Reopen/Revert a form - all connected forms are now closed
6234
6335## ToDo
6436
65- * Allow to connect to forms, that are used in the uses section. Technically there is _no_ connection between the uses section and the form streaming, because form streaming uses global variables. But the IDE must somehow find the referenced form. Without the uses section the IDE must in worst case search and read every reachable lfm file on disk. So the uses section is a good compromise between speed and flexibility.
37+- Allow to connect to forms, that are used in the uses section. Technically there is *no* connection between the uses section and the form streaming, because form streaming uses global variables. But the IDE must somehow find the referenced form. Without the uses section the IDE must in worst case search and read every reachable lfm file on disk. So the uses section is a good compromise between speed and flexibility.
6638
6739# Translations, i18n, lrt files, po files
6840
6941## Short Description
7042
71-This feature automatically creates and updates .po files for packages and projects.
43+This feature automatically creates and updates .po files for packages and projects.
7244
7345## Working
7446
75- * Dialog options for project/package to enable i18n
76- * Collect TTranslateStrings from RTTI while designer form writing and writing them to lrt file.
77- * Copying new strings from rst and lrt files to a single .po file for each project
78- * load the .po files
79- * Delete unused strings from the .po file of package/projects
80- * Update translated .po files, similar to the updatepofiles tool.
47+- Dialog options for project/package to enable i18n
48+- Collect TTranslateStrings from RTTI while designer form writing and writing them to lrt file.
49+- Copying new strings from rst and lrt files to a single .po file for each project
50+- load the .po files
51+- Delete unused strings from the .po file of package/projects
52+- Update translated .po files, similar to the updatepofiles tool.
8153
8254## ToDo
8355
84- * Copying new strings from rst and lrt files to a single .po file for each package (implemented, need dialog option to change po filename or need agreedment to use same name of package)
85- * Collect all .po files of project and all used packages into a directory. This directory can then be used by the project to load the strings at runtime. And installers can copy the content.
86- * standardize filenames and path, so that loading the translations at runtime is possible without writing code.
56+- Copying new strings from rst and lrt files to a single .po file for each package (implemented, need dialog option to change po filename or need agreedment to use same name of package)
57+- Collect all .po files of project and all used packages into a directory. This directory can then be used by the project to load the strings at runtime. And installers can copy the content.
58+- standardize filenames and path, so that loading the translations at runtime is possible without writing code.
8759
8860# Frames
8961
9062## Short Description
9163
92-Frames are special child forms. The goal is to edit them like forms in the IDE designer, and to use them as components on designer forms.
64+Frames are special child forms. The goal is to edit them like forms in the IDE designer, and to use them as components on designer forms.
9365
9466## Working
9567
96-compile lazarus clean with passing **-dEnableTFrame** (not necessary starting from svn release 16909)
68+compile lazarus clean with passing **-dEnableTFrame** (not necessary starting from svn release 16909)
9769
98- * Manually creating via source
99- * gtk1, gtk2, qt, win32/win64
100- * Create a new frame
101- * Open a frame in the designer
102- * Save a frame
103- * Close a frame
104- * Revert a frame
105- * Design a frame (adding, selecting, moving controls, ...)
106- * Opening a nested frame
107- * Opening a nested frame with ancestors
108- * Support for the inline keyword for lfm and lrs streams.
109- * Add a frame to a form, add unit to uses section, package to project dependencies
110- * Auto opening frame if not yet loaded
111- * Close a frame that is currently used by a nested frame
112- * Close a form with an embedded frame
113- * Save a form with an embedded frame
114- * Delete a frame embedded in a form
115- * Inherited nested Components (Components with the frame as Owner and not the Form)
116- * Show inherited nested components properties in OI
117- * Forbid deleting nested inherited components
118- * Forbid renaming nested inherited components
119- * Show inherited nested components events in OI as ClassName.MethodName
120- * When dblclick on inherited nested components events in OI create an event with the following code: Frame1.FrameResize(Sender);
121- * When Ctrl+Click on inherited nested components events in OI jump to inherited code.
122- * show nested components in OI component tree
123- * Write nested component to stream
124- * Forbid putting a component onto a nested frame, because TWriter does not support that.
125- * Revert a form with an embedded frame
70+- Manually creating via source
71+- gtk1, gtk2, qt, win32/win64
72+- Create a new frame
73+- Open a frame in the designer
74+- Save a frame
75+- Close a frame
76+- Revert a frame
77+- Design a frame (adding, selecting, moving controls, ...)
78+- Opening a nested frame
79+- Opening a nested frame with ancestors
80+- Support for the inline keyword for lfm and lrs streams.
81+- Add a frame to a form, add unit to uses section, package to project dependencies
82+ - Auto opening frame if not yet loaded
83+- Close a frame that is currently used by a nested frame
84+- Close a form with an embedded frame
85+- Save a form with an embedded frame
86+- Delete a frame embedded in a form
87+- Inherited nested Components (Components with the frame as Owner and not the Form)
88+ - Show inherited nested components properties in OI
89+ - Forbid deleting nested inherited components
90+ - Forbid renaming nested inherited components
91+ - Show inherited nested components events in OI as ClassName.MethodName
92+ - When dblclick on inherited nested components events in OI create an event with the following code: Frame1.FrameResize(Sender);
93+ - When Ctrl+Click on inherited nested components events in OI jump to inherited code.
94+ - show nested components in OI component tree
95+ - Write nested component to stream
96+- Forbid putting a component onto a nested frame, because TWriter does not support that.
97+- Revert a form with an embedded frame
12698
12799## ToDo
128100
129- * Propagate changes of ancestor to nested controls
130- * Tutorial
131- * Documentation
132- * Update
101+- Propagate changes of ancestor to nested controls
102+- Tutorial
103+- Documentation
104+- Update
133105
134106# VFI - Visual Form Inheritance
135107
136108## Short Description
137109
138-Forms can inherit from other forms. The .lfm streams of ancestors are read/applied before the current lfm. The .lfm of the descendant is the difference between ancestor and current state. The IDE allows to open and edit inherited forms. VFI does not only apply to TForm, but TDataModule, TFrame and any registered base designer class. For the full features compile with -dEnableTFrame.
110+Forms can inherit from other forms. The .lfm streams of ancestors are read/applied before the current lfm. The .lfm of the descendant is the difference between ancestor and current state. The IDE allows to open and edit inherited forms. VFI does not only apply to TForm, but TDataModule, TFrame and any registered base designer class. For the full features compile with -dEnableTFrame.
139111
140112## Working
141113
142- * find ancestor unit, lfm and class
143- * automatically open ancestor form hidden in background
144- * open descendant and read ancestor lfm first
145- * show hidden ancestor form
146- * hide ancestor form
147- * automatically close hidden ancestor form if not needed anymore
148- * create new ancestor form via 'File / New ... / Inherited Items'
149- * forbid deleting inherited components
150- * forbid renaming inherited components
114+- find ancestor unit, lfm and class
115+- automatically open ancestor form hidden in background
116+- open descendant and read ancestor lfm first
117+- show hidden ancestor form
118+- hide ancestor form
119+- automatically close hidden ancestor form if not needed anymore
120+- create new ancestor form via 'File / New ... / Inherited Items'
121+- forbid deleting inherited components
122+- forbid renaming inherited components
151123
152124## ToDo
153125
154- * inherited events (partially working)
155- * apply changes of ancestor to descendants when both are open
156- * Tutorial
157- * Documentation
126+- inherited events (partially working)
127+- apply changes of ancestor to descendants when both are open
128+- Tutorial
129+- Documentation
158130
159131# The jedi code formatter
160132
161133## Short Description
162134
163135## Working
164136
165- * Pressing ctrl+D will format your source file
166- * Settings are stored and read by IDE from JCFSettings.cfg file
167- * port the jcf option dialogs
137+- Pressing ctrl+D will format your source file
138+- Settings are stored and read by IDE from JCFSettings.cfg file
139+- port the jcf option dialogs
168140
169141## ToDo
170142
171- * use jcf for indentation
143+- use jcf for indentation
172144
173145# Debugger
174146
175147Please see: [[Debugger Status]]
176148
177149## Short Description
178150
179151## Working
180152
181- * show breakpoints etc in asm window
182- * implement/design interface on debugger class to show/handle threads
183- * attach to process
153+- show breakpoints etc in asm window
154+- implement/design interface on debugger class to show/handle threads
155+- attach to process
184156
185157## ToDo
186158
187- * implement/design interface on debuggerclass to handle os exceptions
188- * implement/design interface on debugger class to show messages
189- * implement/design interface on debugger class to show loaded modules
190- * implement debugging of forked processes
191- * implement launching process on xterm (mainly for console apps)
192- * find include files in fpc sources
159+- implement/design interface on debuggerclass to handle os exceptions
160+- implement/design interface on debugger class to show messages
161+- implement/design interface on debugger class to show loaded modules
162+- implement debugging of forked processes
163+- implement launching process on xterm (mainly for console apps)
164+- find include files in fpc sources
193165
194166# Release Notes
195167
196- * [[Lazarus 1.4.0 release notes]]
197- * [[Lazarus 1.2.0 release notes]]
198- * [[Lazarus 1.0 release notes]]
199- * [[Lazarus 0.9.30 release notes]]
200- * [[Lazarus 0.9.28.2 release notes]]
201- * [[Lazarus 0.9.28 release notes]]
202- * [[Lazarus 0.9.26.2 release notes]]
203- * [[Lazarus 0.9.26 release notes]]
204- * [[Lazarus 0.9.24 release notes]]
168+- [[Lazarus 1.4.0 release notes]]
169+- [[Lazarus 1.2.0 release notes]]
170+- [[Lazarus 1.0 release notes]]
171+- [[Lazarus 0.9.30 release notes]]
172+- [[Lazarus 0.9.28.2 release notes]]
173+- [[Lazarus 0.9.28 release notes]]
174+- [[Lazarus 0.9.26.2 release notes]]
175+- [[Lazarus 0.9.26 release notes]]
176+- [[Lazarus 0.9.24 release notes]]
205177
206178---
207-*From the Free Pascal wiki, page "IDE Development", as the Internet Archive kept it on 2023-06-04. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*
179+*From the Free Pascal wiki, page "IDE Development", as it stood on 2019-12-09 after a change by Martin, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*
180+Category: Lazarus internals

Back to history