Lazarus 1.4.0 release notes

From Free Pascal wiki
Jump to navigationJump to search

Template:Lazarus 1.4.0 release notes

Lazarus 1.4.0 is not yet released. This page is under construction!

Statistics:

  1. commits: xxx
  2. log: svn log -r xxxx:xxxx
  3. resolved bug tracker issues: xxx

LCL Interfaces Changes

LCL Changes

  • Added methods and utilities to load objects from FPC resources: TGraphic.LoadFromResourceName(), TPicture.LoadFromResourceName(), TCustomImageList.AddResourceName(), LoadGlyphFromResourceName().
  • Changed all LCL resources from LRS to RES. As a result they can be edited in executables using resource editors on Windows platform.
  • DBImage changes versues 1.2: DbImage implements loading stream directly if it doesn't have a known header, WriteHeader property. This makes writing image header optional improving compatibility with Delphi controls - see revision 43779.

IDE Changes

  • Resources
    • All IDE resources are stored in RES files now.
    • Component images can be loaded from resources stored in RES files now.
    • LazRes and LrsToLfm have been improved to assist in resource migration process.
    • Project options has a 'Resource' section which allows to add any user resources which are stored in the project .RES file together with project icon, manifest and version information.
    • Project version information was extended to allow saving build-related attribute information.
  • Editor
    • Auto-Indent now supports "tab only". If a new line is started, the indent of the previous line is recreated using tabs. And then either spaces or cut off.
    • Keyword-pair/triplet highlight (matching begin,end) can be turned on/off for each pair/triplet
    • Keyword-pair/triplet supports if/then/else
    • Compiler message marks. Each compiler message shows an icon in the left gutter, a wavely underline in the text and a mark on the right gutter. You can right click on the left icon to get context actions, e.g. Quick Fixes.
    • Refactoring tool Show Abstract Methods now supports class interfaces.
  • Debugger
    • Attach: List available processes (Windows/Linux/OSX only)
    • Debug-Inspector: Select member values (class/record/(dyn)array/pointer-deref) by double click on row
    • Allow single step from exception to except/finally block (includes stepping through implicit except blocks, at then end of some methods).
      • Also fix single step now works, if it steps over an ignored exception.
  • Designer
    • Simple Undo for properties changed by Object Inspector and moves
  • Project
    • The target processor option now uses the -Cp option instead of the -Op option. This is required by ARM processors.
    • The compiler in the project's compiler options is now asked for settings for parsing sources. Formerly the IDE asked the default compiler from the Tools / Options using the project's target OS and CPU. That means you can now use build modes to switch between different compiler versions and code navigation will use the right settings.
    • The IDE now parses the -Xp and -V options in the custom compiler options to find the right compiler.
    • Project Option "Main unit has uses section containing all units of project": Formerly the main source was only updated when it was enabled. Now: Only additions are affected by this option. Renames and removes always updates the main source if it is Pascal.
    • Under Unix/Linux the IDE now opens always a project (lpi) in its physical path (i.e. all symlinks are resolved). This is compatible with FPC, which always uses the physical directory as working directory.
    • Project Inspector:
      • The Inspector now supports multi selection. For example delete multiple files or set properties.
      • You can drag files from other applications and drop them on Inspector to add files to the project.
      • You can drag files to other directories (drag the files onto a file or directory in the package editor).
      • New menu item: Move/copy selected files to a directory. This makes it easy to split a big package into several sub directories.
  • Packages
    • The target processor option now uses the -Cp option instead of the -Op option. This is required by ARM processors.
    • Under Unix the IDE now opens always a package (lpk) in its physical path (i.e. all symlinks resolved). This is compatible with fpc, which always uses the physical directory as working directory.
    • Package Editor:
      • The package editor now supports multi selection. For example delete multiple files or set properties.
      • You can now copy or move files via drag and drop between package editors and to/from project inspector.
      • You can drag files from other applications and drop them on package editors to add files to the package.
      • You can drag files to other directories (drag the files onto a file or directory in the package editor).
      • New menu item: Move/copy selected files to a directory. This makes it easy to split a big package into several sub directories.
    • Packages are now compiled in parallel.
  • Messages
    • This window was completely rewritten. Every tool output is now clearly separated by a header line.
    • Each external tool (e.g. the compiler) now runs in a thread. The same for the biggest part of the parser.
    • The IDE now passes -vbq (message ids and full file names) to the compiler.
    • The window can handle much bigger outputs, so you can compile with more verbosity
    • The IDE now knows where each message came from and what tool has created them. For example you can see the reason why a package was compiled and the parameters via the "About" menu item.
    • Switch between English and translation at any time
    • The fpc message parser uses the message ids, the errore.msg file and the translated error*.msg file. The -Fr compiler option (pass custom fpc message file) on Project/Package Options / Compiler Options / Messages was removed.
    • Search in Messages window
    • Filter for message types and urgency (hint, note, warn ...)
    • Choose file names styles (short, relative, full)
    • Change the colors in Tools / Options / Messages
    • when you insert/delete text in the source editor the messages are now updated in line *and* column number.
    • The Compile Info window was removed.
    • Quick fix for fpc message "No implementation for interface method found", shows abstract methods dialog
  • Miscellaneous
    • new IDE macros $(LazVer) and $(FPC_FULLVERSION), see here
  • Plugins
    • Leakview now supports GDB stack traces without source file names and only mangled identifiers.

Components

TEditButton

TEditButton has been redesigned as a "grouped control". It now inherits from a different ancestor (it is no longer derived from TCustomMaskEdit). The new design now properly aligns and anchors.
Effects:

  • Derived components can no longer override (or use) all of the (protected) methods of TCustomMaskEdit. Most of the commonly used methods have been propagated with new names reflecting the new design e.g.:
    • Change -> EditChange
    • DblClick-> EditDblClick
  • When the component has focus, then checking if (ActiveControl is TButtonEdit) will be False, since ActiveControl in this case is the internal edit control (of type TEbEdit). (Code that checks for (ActiveControl is TCustom(Mask)Edit) will still evaluate to True.)

Remedy:

  • Use EditChange, EditDblClick etc. in derived controls.
  • Use (ActiveControl.Parent is TEditButton), or alternatively (ActiveControl is TEbEdit)

Changes affecting compatibility

LCL incompatibilities

TControl.GetChildsRect renamed to TControl.GetChildrenRect

  • Effect: compile error: There is no method in an ancestor class to be overridden: "TYourControl.GetChildsRect(Boolean):<record type>;"
  • Reason: Incorrect English
  • Remedy: use GetChildrenRect instead.

TControlScrollBar.AutoCalcRange was removed

  • Effect: compiler error: There is no method in an ancestor class to be overridden: "TYourControlScrollBar.AutoCalcRange;"
  • Reason: Code for calculating the AutoScroll ranges was moved from the two scrollbars to the new proteced method TScrollingWinControl.CalculateAutoRanges. This prevents an endless loop when the two scrollbars depend on each other, it simplifies the code and reduces some overhead.
  • Remedy: Override TYourControl.CalculateAutoRanges instead.

IDE incompatibilities

Changed parameters

  • LazarusIDE.DoJumpToCompilerMessage: changed Line integer to TMessageLine
  • CompilerOptions.ShowAllProcsOnError: was removed, option -vb is now always passed
  • CompilerOptions.ShowNothing: was removed, not needed
  • LazarusHelp.ShowHelpForMessage: removed parameter Line. The IDE now always shows help for the currently selected line.

Previous release notes