doc • release • 3.14.0

Gambas 3.14.0

What's new?

This release brings the main following features:

  • The IDE can now print a source code file.

  • A lot of fixes in the packager wizard.

  • A 16 point size version of the Gambas font.

  • Support for immutable (read-only) arrays.

  • PROPERTY...USE... is a new shortcut syntax for defining properties.

  • Uncaught errors raised from an event handler can be ignored now.

  • The compiler emits column position on errors and warnings if possible.

  • Many fixes for dark themes.

  • Message boxes are not native anymore.

  • Web applications based on gb.web or gb.web.form now correctly handle the Accept-Language HTTP header.

Compilation and installation

Read the instructions there.

If everything was fine, type "gambas3" to run the development environment.

Enjoy it !

Changelog

CONFIGURATION

  • Fix Willy Raets' mail address.

  • Update Gambas 3 desktop file and add french translations.

DEVELOPMENT ENVIRONMENT

About dialog

  • Wrap license text so that it is not truncated.

  • Update design.

  • Display financial support again.

Automatic completion

  • Handle boxed strings.

  • Fix constructor signature computation.

Code editor

  • Fix keyboard handling in procedure list.

  • Add a print button and menu entry that prints the contents of the editor.

  • Automatic insertion of global variables now inserts the STATIC keyword if the current function is static.

Database editor

  • Locating SQLite database inside the home directory or inside the project now works correctly.

Debugger

  • Make debugging windows fully readable with dark themes.

  • Fix a possible crash when disabling/enabling a breakpoint.

Farm client

  • ESC key now closes the window.

Form editor

  • Fix a possible crash when dragging a toolbox control on a form.

Help browser

  • The loading spinner is now always correctly centered.

Image editor

  • Selection drawing tool now works correctly when snapping lines to 15° angles by pressing the ALT key.

  • Show the grid below the selection and other tool strokes.

Make executable dialog

  • Add an option not to increment version. This option is saved in the local project settings.

Menu editor

  • Double-clicking on a menu entry now automatically closes the menu editor to open the Click event handler of that menu.

Options dialog

  • Use icon-only tool buttons for configuring highlight style.

  • Add an option to define the font used for printing.

Packager wizard

  • Remove deprecated entries in SPEC file for mageia.

  • Remove support for mandriva.

  • Do not remove deprecated entries from SPEC file for Mageia, it does not work.

  • Don't use absolute path for executable in desktop files.

  • The desktop file Name entry is now emitted with its translations.

  • Extra desktop file entries can override default entries.

  • Allow to enter the minimum Gambas version required.

  • Translate project description in desktop file.

  • When making a *.deb package, clean-up the target directory from possible already existing similar packages. Otherwise dpkg-buildpackage does not build.

  • Doing the same package several times without closing the wizard works correctly now.

  • Autotools package does not use the deprecated AM_INIT_AUTOMAKE syntax anymore.

  • Create lower-case symbolic links on executables for Debian, Slackware, ArchLinux and Autotools packages.

Project creation dialog

  • Forbid <, >, (, ), { and } in project names.

  • Disable templates using components not installed on the system.

Project properties dialog

  • Environment variables menus must not be translatable.

  • Standardize the look of lists widgets.

  • Add support for extra references, i.e. external executables that add their symbol information to the automatic completion. This is useful if your project is a library loaded by the extra reference that uses its exported classes.

Project tree

  • Startup class is now drawn with underline bold text instead of using an emblem.

  • "Open in folder" menu entry is now visible on file items, not just directories.

Search dialog

  • The "Public" folder is now correctly browsed in all cases.

Text editor

  • Add a print button and menu entry that prints the contents of the editor.

Translation dialog

  • New button that adds a new translation.

  • The "-" string is not used anymore for strings marked as not to be translated. Instead a specific "# gb-ignore" comment and a void translation are written into the PO file.

  • Automatic translation now works better with multi-line translations.

  • The automatic translation now stops as soon as the translation program fails.

Translations

  • Update French translation.

  • Update French translation so that top-level menu does not use characters with diacritics for shortcuts.

  • Always read the translation of project title and description when displaying a project box, and read them correctly.

  • Updated Dutch translation.

  • Update translations of license.

  • Update Spanish translation.

  • Update Italian translation.

Version control

  • Command timeout is now 15 seconds instead of 30.

  • Add a new tab in the bottom panel for managing version control.

  • Always reload the project after a pull / update from the repository.

Miscellaneous

  • Remove the now useless authors.txt file.

  • Add cyrillic and greek character in the SDL default font generation function.

  • When a component of the opened project is not installed, do not remove it from the project component list. Keep it uncheckable.

  • Correctly read multi-lines translations of project title and description.

  • Redraw some icons.

  • Update financial support.

  • Update highlight themes.

  • Support for new Highlight.Alternate style.

  • Add support for the new gb.form.print component.

  • When gb.gui is used, only propose GUI components actually installed on the system.

  • Support for the ByRef annotation in .info files.

  • Update Gambas fonts.

  • Update error messages.

  • Add a 16 point version of the Gambas font, in medium and bold weight.

  • Add dark theme versions of component chooser icons (checked, partially checked, locked).

  • Add a bookmark on the current project in all directory and file choosers.

WIKI

  • Discount comments in .info files when calculating number of symbols.

  • Updated Dutch translations

  • Support for ByRef annotations in .info files.

  • Fix links inside symbol syntax, so that they keep the current language.

WEB SITE MAKER

  • Updated Dutch translations

EXAMPLES

  • DnsClient: Fix mageia web site hostname.

  • Replace "mandrake" by "mageia" in DnsClient example.

  • Make Games/Invaders compile correctly.

  • Update some translations.

INTERPRETER

  • Add two new standard errors: "Multidimensional array" and "Unknown class".

  • Fix gb.Scientific number format.

  • Stream.Eof is a new property that returns if end of stream has been reached. It's the same thing as Eof(Stream).

  • Ignore errors when loading a class for the JIT compiler.

  • Component.Load() can load a component located at an absolute path now.

  • If the current translation does not exist, try to use the first available translation of the same language in another country.

  • The archive path is now a dynamic string.

  • Don't crash anymore when searching into an archive that failed to load.

  • Replace some specific error messages by standard errors.

  • The "Embedded array" error message has been rewritten as "Read-only array".

  • Array.ReadOnly is a new property that make an array read-only. Once set, the property cannot be unset.

  • Static class initializer are now always correctly run in the context of their component.

  • Fix JIT compilation when there are a lot of functions.

  • &/ operator now automatically converts its arguments to strings.

  • Error.Clear() now clears the error flag returned by the ERROR function.

  • Uncaught errors raised from an event handler can be ignored now.

COMPILER

  • Take project extra references into account.

  • Emit column position in almost all error messages. It makes the compiler about 0.5% slower.

  • Some optimizations in symbol table routines.

  • Add ByRef annotations to the ".info" files generated by the compiler. The name of "ByRef" method arguments is now prefixed with a & character.

  • PROPERTY...USE... is a new syntax to declare a property automatically associated with a private global variable.

INFORMER

  • Fix a forgotten ! that broke the informer.

GB.ARGS

  • Updated Dutch translations

GB.CLIPPER

  • Get rid of a gcc warning.

  • Update library to version 6.4.2.

GB.COMPRESS.BZLIB2

  • Fix a few error messages.

  • Fix incorrect datatype of some driver function arguments that lead to a crash.

GB.COMPRESS.ZLIB

  • Fix a few error messages.

GB.DB

  • Print the current date/time before any debugging message.

GB.DB.FORM

  • DataComboView: Add argument to the signature of Event Validate.

  • DataSource: IgnoreParent is a new property that tells the DataSource not to filter its contents with any of its parent DataSource.

  • Updated Dutch translations

GB.DB.MYSQL

  • Build with newer mysql/mariadb.

GB.DB.SQLITE3

  • Multiple statements in the same query does not leak memory anymore. In that case, the result of the last statement is returned.

  • Take newlines, tabs, and backticks into account when analyzing a table schema.

GB.DBUS

  • Always specify the direction of input method arguments in introspection, otherwise the qdbusviewer tool does not work.

GB.DESKTOP

  • Desktop.Passwords: Work correctly now when multiple desktops are included in the Desktop.Type property.

  • DesktopFiles: Remove some useless array copies.

  • DesktopMime: Correctly identify executables as "application/x-executable".

  • Desktop.Types is a new property that returns a read-only array of each desktop defined in Desktop.Type.

GB.DRAW

  • Paint: Scale() second argument is now optional, and takes the same value as the first argument if omitted.

  • Paint: FontScale is a new property that defines a scale applied to the size of the fonts assigned to the Paint.Font property.

  • Painting on an already painted device now correctly inherits the Paint.FontScale property.

GB.EVAL

  • Highlight.Alternate is a new constant that represents the background style used for coloring code embedded into webpages.

GB.EVAL.HIGHLIGHT

  • CSS highlighter: Support for CSS escaped characters.

  • Support for new Highlight.Alternate style.

GB.FORM

  • DocumentView: Allow zoom up to 800%.

  • DocumentView: Desaturate is a new property that desaturates the preview. It's slow when the zoom is huge.

  • DocumentView: ShowPage is new property that displays the current page and the number of pages inside the preview.

  • DocumentView: Fix some cases of page drawing not correctly triggered.

  • DocumentView: Use Paint.Begin() instead of Draw.Begin(), so that preview uses anti-aliasing.

  • DocumentView: The default background color is now a mix of the default text foreground and background colors.

  • DocumentView: Correctly reset the scroll position when setting Arrangement to Arrange.Fill.

  • DocumentView: Remove erroneous public constant written in French.

  • Expander: Redesign the Expander title.

  • FileView: Add information about each file next to the icon in icon view mode.

  • IconPanel: Fix cursor keys management, so that hidden tabs cannot be selected by keyboard.

  • ListEditor: Exist() is a new method that returns if an item exists in the list.

  • ListEditor: Add() is a new method that insert a new element in the list.

  • ListEditor: Add is new event that is raised when the add button is clicked.

  • ListEditor: ReadOnly is a new property that makes ListEditor enter read-only mode.

  • ListEditor: Use the remove icon instead of the delete one.

  • MenuButton: Handle right-to-left written language correctly.

  • MenuButton: Use selected background color when the MenuOnly property is set and the MenuButton has the focus.

  • MenuButton: Focus should not be stolen anymore when clicking on a menu-only MenuButton.

  • MenuButton: Fix possible crashes with focus management.

  • SliderBox: Hitting the ESC key in the SpinBox resets the SliderBox to its default value.

  • Spinner: Use the foreground color to draw the spinner and its label.

  • TabPanel: Draw tab focus like hovered buttons.

  • TabPanel: Fix drawing of tab header contents.

  • TabPanel: Use the TabPanel foreground color to draw the titles of the tabs.

  • Update some translations.

  • Italian translations improvements.

  • Updated Dutch translations.

  • New new-tab stock icon.

  • New call stock icon.

  • Bookmarks is a new static class that allows to define global bookmarks for all FileChooser and DirChooser controls.

  • FileChooser: Add separators between the different kind of bookmarks in the bookmark menu.

GB.FORM.DIALOG

  • Updated Dutch translations

GB.FORM.EDITOR

  • TextEditor: Undo now groups successive single character insertions, and successive single character deletions as well.

  • TextEditor: Don't enclose selection with quotes anymore, it is more annoying than anything else.

  • TextEditor: TextEditor[].Paint() is a new method that paint the contents of a line, without the margin.

  • TextEditor: Now we can set up to 32 style colors without crashing.

  • TextEditor: Draw wrapped lines with a normal background, but with a gray hook to its right.

  • TextEditor: Translate popup menu.

  • TextEditor: When the cursor moves, the blinking timer is reset so that the cursor blinks only when it is not moving.

  • TextEditor: Matching braces now blink with the cursor.

  • TextEditor: Support for new Highlight.Alternate style.

GB.FORM.MIDI

  • Updated Dutch translations

GB.FORM.PRINT

  • gb.form.print is a new component that extends the Printer class with a generic preview and print dialog.

GB.FORM.STOCK

  • Add a 128 pixel version of the delete stock icon.

  • Redraw a few icons.

  • New new-tab stock icon.

  • Add call stock icon and redraw archive icon.

  • Add 128 pixels versions of stock icons used by mimetypes.

GB.FORM.TERMINAL

  • TerminalView: Update colors so that they are readable both on a light and a dark background.

GB.GTK

  • Control: Fix the Tooltip property name.

  • Control: Fix the symbol lookup error of the Tooltip property.

  • Message: Remove the message box native implementation.

  • Paint: Implementation of Paint.FontScale.

  • Printer: All printer events are raised between a single Paint.Begin() / Paint.End().

  • Message boxes now correctly use the translated title.

  • Tooltips now support rich text, like in the QT components.

  • Disable top-level menus shortcuts when the window menu bar is hidden.

  • Drag.X and Drag.Y properties are now writable.

  • Drag.Show() and Drag.Hide() methods are now implemented in gb.gui.base.

  • Automatically set Paint.FontScale when painting on a printer, so that font size is actually the same as on the screen.

  • Fix a memory leak when getting the size of a piece of text.

  • Fix menu proxy management that could crash combo-box popups.

  • Uncaught errors raised from an event handler can be ignored now.

GB.GTK3

  • Control: Fix the Tooltip property name.

  • Control: Fix the symbol lookup error of the Tooltip property.

  • Message: Remove the message box native implementation.

  • Paint: Implementation of Paint.FontScale.

  • Printer: Font sizes now are the same as with QT components.

  • Printer: Print() does now crash anymore.

  • Printer: All printer events are raised between a single Paint.Begin() / Paint.End().

  • Rudimentary support for GDK backends that are not X11.

  • Message boxes now correctly use the translated title.

  • Tooltips now support rich text, like in the QT components.

  • Disable top-level menus shortcuts when the window menu bar is hidden.

  • Finishing a drag & drop now correctly releases the button grab.

  • Drag.X and Drag.Y properties are now writable.

  • Drag.Show() and Drag.Hide() methods are now implemented in gb.gui.base.

  • Automatically set Paint.FontScale when painting on a printer, so that font size is actually the same as on the screen.

  • Fix a memory leak in font object creation.

  • Fix a memory leak when getting the size of a piece of text.

  • Fix menu proxy management that could crash combo-box popups.

  • Uncaught errors raised from an event handler can be ignored now.

GB.GUI.BASE

  • GridView: GridView.Rows[].TextAlign is a new property that allows to define the alignment of the row header text.

  • GridView: The padding of column headers is at least half of Desktop.Scale.

  • GridView: Compute preferred column width correctly.

  • GridView: Border padding is now applied inside the cell, not outside like the margin.

  • GridView: Rich-text in centered cells with no text wrapping is correctly drawn now.

  • IconView: Draw selected icons with a rectangular frame.

  • Message: Implement the message boxes entirely in Gambas.

  • ScrollArea: The Scroll() method returns TRUE now if no scrolling actually occured.

  • SpinBox: Forgot to implement the ReadOnly property.

  • SpinBox: Hitting the ENTER or RETURN key triggers the Change event if needed.

  • TreeView: Item X property now correctly takes the TreeView padding into account.

  • TreeView: Setting the item Font property to NULL does not crash anymore.

  • TreeView: A Scroll event is raised now when the TreeView, the ListView or the ColumnView scrolls.

  • TreeView & ColumnView: The arrow size now follows the font size.

  • TreeView & ColumnView: ShowLines is a new property that makes the control draw tree lines.

  • Paint.DrawRichTextShadow() default radius is now the same as Paint.DrawTextShadow().

  • Add helper function for disabling/enabling top-level menu shortcuts.

  • Drag.Show() and Drag.Hide() methods are now implemented in gb.gui.base.

  • Top-level menus initialization routine takes invalid menus into account now.

  • Paint.Arrow() is a new method that draws an arrow.

  • Don't depend on gb.form, it breaks the compilation!

GB.JIT

  • Loading a class during JIT compilation can fail. Take that into account.

  • Enumerating an unknown datatype does not raise an error automatically anymore.

  • Fix boolean datatype management.

GB.MEDIA.FORM

  • Emit standard control events from the inner DrawingArea.

  • Don't crash when seeking if no media is played.

GB.NET

  • Workaround a bug in system header files on PPC systems.

GB.NET.CURL

  • DownloadManager: Add a Connect event raised when the distant server is connected.

  • DownloadManager: Remove useless Message event.

GB.NET.POP3

  • Fix .project and .component files that incorrectly had conflict marks in it.

  • Updated Dutch translations

GB.OPENSSL

  • Add linking exception for OpenSSL (Thanks, Bastian Germann).

  • Allow arbitrary digest methods to be passed to HMac(). They are now identified by their name. The integer arguments are deprecated.

  • Add OpenSSL.RandomBytes to generate a cryptographically strong pseudo-random string of given length

  • Add static class OpenSSL for general utility methods provided by OpenSSL

GB.PDF

  • Compile with poppler >= 0.76.

GB.QT4

  • Message: Remove the message box native implementation.

  • Paint: Implementation of Paint.FontScale.

  • Dialog.SelectDirectory() now correctly shows hidden files when Dialog.ShowHidden is TRUE.

  • Drawing text now respects right-to-left languages the same way on every drawing device.

  • Disable top-level menus shortcuts when the window menu bar is hidden.

  • Drag.X and Drag.Y properties are now writable.

  • Drag.Show() and Drag.Hide() methods are now implemented in gb.gui.base.

  • Fix rich text size computation.

  • Fix rich text size margins between paragraphs and titles.

  • Automatically set Paint.FontScale when painting on a printer, so that font size is actually the same as on the screen.

  • Uncaught errors raised from an event handler can be ignored now.

GB.QT4.EXT

  • Editor: Fix Highlight.Alternate property.

GB.QT5

  • Message: Remove the message box native implementation.

  • Paint: Implementation of Paint.FontScale.

  • Dialog.SelectDirectory() now correctly shows hidden files when Dialog.ShowHidden is TRUE.

  • Drawing text now respects right-to-left languages the same way on every drawing device.

  • Disable top-level menus shortcuts when the window menu bar is hidden.

  • Drag.X and Drag.Y properties are now writable.

  • Drag.Show() and Drag.Hide() methods are now implemented in gb.gui.base.

  • Fix build with Qt 5.13.

  • Fix rich text size computation.

  • Fix rich text size margins between paragraphs and titles.

  • Automatically set Paint.FontScale when painting on a printer, so that font size is actually the same as on the screen.

  • Uncaught errors raised from an event handler can be ignored now.

GB.QT5.EXT

  • Fix build with Qt 5.13.

GB.QT5.OPENGL

  • Fix build with Qt 5.13.

GB.QT5.WEBKIT

  • Fix build with Qt 5.13.

GB.REPORT

  • Updated Dutch translations.

GB.REPORT2

  • Updated Dutch translations.

GB.SDL2

  • Add Greek and Cyrillic characters to the default font.

  • Update default font with latest version of Gambas font.

GB.TERM.FORM

  • Fix Dutch translation file which had conflict markers inside.

  • Fix project description.

  • Remove useless void translation files.

  • Updated Dutch translator e-mail

GB.UTIL

  • Date.IsWeekEnd() is a new method that returns if a date is a week end.

  • Update French translation.

GB.WEB

  • Request: Posted field request using multipart/form-data and having initial void lines were incorrectly trimmed. Posted files were not affected.

  • Enhance language detection done by the Request.Language property.

  • CGI error message is not translatable.

  • If the request exceeds the maximum size defined by Request.MaxFileSize, a "Request too big" error is raised instead of "Response too big".

  • Request.Language now takes the priority of languages specified in the Accept-Language HTTP header into account.

  • Request.Language now uses an internal dictionary to convert the Accept-Language HTTP header to a correct system language.

  • Request.ContentLength is a new property that returns the Content-Length HTTP header, or -1 if the header is not present.

  • Request.ContentType is a new property that returns the Content-Type HTTP header.

GB.WEB.FEED

  • Update translations.

  • Updated Dutch translator e-mail.

GB.WEB.FORM

  • WebForm: Fix message box icons preloading.

  • WebForm: An error is raised now when trying to show an embedded form.

  • WebForm: Forms embedded into other forms work correctly now.

  • Updated Dutch translator e-mail.

GB.XML

  • Error messages must not be translatable.

  • Component version is now taken from the VERSION file.

  • Fix XmlExplorer constructor declaration.

TEMPLATES

  • Update french translation of some template projects.