Gambas Documentation
Application Repository
Code Snippets
Compilation & Installation
Components
Controls pictures
Deprecated components
Developer Documentation
Development Environment Documentation
Documents
About The Best Formula In The World
Architecture details
Benchmarks
Books
By Reference Argument Passing
Compatibility between versions
Creating And Using Libraries
Database Datatype Mapping
Database Request Quoting
Date & time management
Dates and calendars
DBus and Gambas
Differences Between Shell And Exec
Differences From Visual Basic
Distributions & Operating Systems
Drag & Drop
DrawingArea Internal Behaviour
External functions datatype mapping
Frequently Asked Questions
Gambas Farm Server Protocol
Gambas Mailing List Netiquette
Gambas Markdown Syntax
Gambas Naming Conventions
Gambas Object Model
Gambas Scripting
Gambas Server Pages
Gambas Unit Testing
Gambas Wiki Markup Syntax
Getting Started With Gambas
Hall Of Fame
Image Management In Gambas
Including Help Comments in Source Code
Interpreter limits
Introduction
Just In Time Compiler
Just In Time Compiler (old version)
License
Localisation and Internationalization
Mailing Lists & Forums
Naming Conventions
Network Programming
ODBC Component Documentation
PCRE Pattern Syntax
Porting from Gambas 2 to Gambas 3
Previous News
Project Directory Structure
Release Notes
Gambas 2.23.0
Gambas 2.23.1
Gambas 2.24.0
Gambas 3.0.0
Gambas 3.1.0
Gambas 3.1.1
Gambas 3.2.0
Gambas 3.2.1
Gambas 3.3.0
Gambas 3.3.1
Gambas 3.3.2
Gambas 3.3.3
Gambas 3.3.4
Gambas 3.4.0
Gambas 3.4.1
Gambas 3.4.2
Gambas 3.5.0
Gambas 3.5.1
Gambas 3.5.2
Gambas 3.5.3
Gambas 3.5.4
Gambas 3.6.0
Gambas 3.6.1
Gambas 3.6.2
Gambas 3.7.0
Gambas 3.7.1
Gambas 3.8.0
Gambas 3.8.1
Gambas 3.8.2
Gambas 3.8.3
Gambas 3.8.4
Gambas 3.9.0
Gambas 3.9.1
Gambas 3.9.2
Gambas 3.10.0
Gambas 3.11.0
Gambas 3.11.1
Gambas 3.11.2
Gambas 3.11.3
Gambas 3.11.4
Gambas 3.12.0
Gambas 3.12.1
Gambas 3.12.2
Gambas 3.13.0
Gambas 3.14.0
Gambas 3.14.1
Gambas 3.14.2
Gambas 3.14.3
Gambas 3.15.0
Gambas 3.15.1
Gambas 3.15.2
Gambas 3.16.0
Gambas 3.16.1
Gambas 3.16.2
Gambas 3.16.3
Gambas 3.17.0
Gambas 3.17.1
Gambas 3.17.2
Gambas 3.17.3
Gambas 3.18.0
Gambas 3.18.1
Gambas 3.18.2
Gambas 3.18.3
Gambas 3.18.4
Gambas 3.19.0
Gambas 3.19.1
Gambas 3 RC1
Gambas 3 RC2
Gambas 3 RC3
Gambas 3 RC4
Gambas 3 RC5
Gambas 3 RC6
Gambas 3 RC7
Reporting a problem, a bug or a crash
Rich Text Syntax
Screenshots
Text highlighting definition file syntax
The Program has stopped unexpectedly by raising signal #11
Variable Naming Convention
WebPage Syntax
Web site home page
What Is Gambas?
Window & Form Management
Window Activation & Deactivation
Window Life Cycle
XML APIs
Error Messages
Gambas Playground
How To's
Language Index
Language Overviews
Last Changes
Lexicon
README
Search the wiki
To Do
Topics
Tutorials
Wiki License
Wiki Manual

Gambas 3.15.0

What's new?

This release provides the following main features and fixes:
  • A new unit test system made by Christof Thalhofer and Tobias Boege.

  • A new diff mode in the IDE code editor.

  • The ability to save and restore custom IDE layouts.

  • Enhanced support for dark themes.

  • Many fixes in the packager.

  • A new trace mode in the interpreter.

  • A new OPEN NULL syntax for opening a null stream.

  • A new PEEK instruction.

  • A new WAIT NEXT instruction.

  • The &= operator is now hundreds of times faster.

  • New special methods that allow any object to be serialized.

  • A new faster gb.web.gui component that replaces gb.web.form.

  • A new gb.poppler component that replaces gb.pdf.

Compilation and installation

Read the instructions there.

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

Enjoy it !

Changelog

CONFIGURATION

  • Switch version to 3.15.0.

  • Switch bytecode version 3.8 to 3.15.

  • Change the order of compilation of components made in Gambas, so that gb.scanner is compiled after gb.form.print, as the project uses it.

  • Remove INSTALL.html file. It was including deprecated links that now points at spam.

  • Update mail address in appdata xml file.

  • gb.ncurses now compiles on systems which only provide wide-character versions of ncurses pkg-config files.

  • Update AUTHORS file.

  • Compile gb.form.stock before gb.form now that is it checked in the gb.form project components.

  • Fix Gambas e-mail in configuration script.

  • Fix component template generator.

  • Add man pages.

  • Update TODO file.

  • Fix gitlab CI configuration.

DEVELOPMENT ENVIRONMENT

Automatic completion

  • Add _read and _write to the list of special methods.

  • Add _ready to the list of special methods.

  • Fix completion of identifiers.

  • Automatically load gb.test for automatic completion.

Code editor

  • Add a toolbar button that toggles display of differences with last commit.

  • The automatic completion now appears at the correct position when the view is splitted.

  • Error messages now use the same background as the editor, to ensure they are always readable.

  • When inserting a color, the color dialog is now initialized with the hexadecimal value under the cursor if any.

  • The THEN keyword is now automatically inserted if missing.

  • PROPERTY ... USE is taken into account by automatic variable declaration.

  • If you use the PROPERTY ... USE syntax, you have to use the SHIFT key with the ENTER key to automatically insert property handlers.

  • Return value of CLOSE and SHELL / EXEC ... TO syntax are now taken into account by automatic variable declaration.

Database editor

  • The record count is correctly updated now, when records are removed or added.

  • Creating, renaming or removing a table now correctly updates the database template file.

Debugger

  • The stack trace list can be resized.

  • The toggle button that switches between collection or array contents and their symbols does not disappear anymore.

  • The program arguments are now defined through a specific dialog displayed when running the project.

File creation dialog

  • Remember the size of new images.

Form editor

  • Draw the control frame as soon as the Drag event is raised, to try to workaround a drag & drop bug.

  • Add a new possible size to the toolbox.

  • Replace the toolbar size option by a button on the toolbox.

  • Replace the sort properties option by a button on the property sheet.

  • Support for a diff mode that replaces the gui editor by a text editor showing the differences.

  • Fix default size of virtual controls.

  • Add a information line on the toolbox that displays the name of the current hovered toolbox control, and the component it belongs to.

  • The frame of control dropped from the toolbox should correctly disappear in all cases.

  • Draw the frame of control dropped from the toolbox bigger.

  • Fix the tab order of the control toolbox.

  • Selection of menu icons now allows stock icons again.

  • Toolbox controls icons now adapt to dark themes.

Help browser

  • Support for the new help wiki command.

  • Fix behavior of offline documentation.

  • Cancel downloading when using a custom special url.

  • Handle custom array classes in help.

Image editor

  • Fix a possible infinite recursion when refreshing the clipboard tab.

  • Use the new stock icons in the property panel.

  • Draw the grid lines with foreground color.

  • Resize the information tooltip for large coordinate values.

  • The grid configuration gets a sane default the first time it is toggled.

  • Grid configuration is now specific to each editor.

Make executable dialog

  • New design.

  • Add an option that excludes test modules from the executable.

  • The output of the command run after executable has been generated is now put in the IDE console.

  • Ask for a confirmation when making executable if no change has been detected and project version should be incremented.

Main window

  • Fix an ambiguous shortcut: opening file properties dialog is now triggered by CTRL+SHIFT+I.

  • Use a long dash to separate the application name in the IDE window title.

  • Display the current branch in the IDE window title.

  • Refresh the IDE window title only if necessary.

  • Add buttons on top of tab bars to show hidden panels.

  • Add a button to toggle sort by inheritance in the project tree.

  • Remove the show property help option.

  • Use tab bar extra buttons for showing project tree, property sheet, control tool box and property help.

  • Add a specific output tab for the unit tests result.

  • Add a test button, that run the project in test mode, using the debugger.

  • Reorder debug panel buttons.

  • Add menu entries for toggling most of the debugging environment variables.

  • Adapt the background image to dark themes automatically.

Options dialog

  • Add global interface layout save/restore ability.

  • Provide two default layouts : a default one, and a compact one.

  • Remove "Quiet external commands" option.

  • Remove "Minimize on execution" option.

  • Add a slider for defining the brightness of the background.

  • Make some combo-box a bit larger for some widget themes where their contents is cropped.

  • The invert colors option is now active only on dark themes.

Packager

  • *.deb packaging now supports spaces in package target directory name.

  • Fix ArchLinux packager.

  • Take package release number into account in rpm & deb dummy package dependencies.

  • Add distribution suffix in rpm support package dependencies.

  • Fix refresh of extra dependencies and additional files tables.

  • New option to add the project major version number to the package name.

  • Underscores are now allowed in extra dependencies package names.

  • Emit dependencies for component projects.

  • Package directory is now stored in the project configuration file.

  • Fix deb package clean directive so that it only deletes the .gambas directory and the executable.

  • Do not use compiler absolute path in packages.

  • Packaging a component with no requirements does not crash anymore.

Project open dialog

  • Do not display the file chooser toolbar when selecting a project.

Project properties dialog

  • The first column of environment table has now a minimum width.

  • Add more project statistics.

  • Add an option to add the current git branch to the project version number.

  • Remove the arguments tab.

  • Make some combo-box a bit larger for some widget themes where their contents is cropped.

  • Fix deletion in argument list when pressing Backspace.

  • Use shorter labels so that translations are visible.

Search dialog

  • The project browsing is now done through a background task.

  • Case insensitive search with words only now works correctly in all cases.

  • Support for browsing compressed files.

Text editor

  • The Compress file button tooltip now shows the actual compression ratio, not its inverse.

  • Text file compression is now transparent, and activated through a toggle button.

  • Uncompressed files are now stored in the .hidden/.uncompressed hidden directory. Files are removed from the old Uncompressed visible directory as soon as it is marked compressed again.

  • The "remove trailing spaces" formatting option has no effect on *.md or *.MD files.

Version control

  • Add a button that clears the version control terminal output.

  • The command error dialog now works correctly.

  • Correctly cancel commands when password dialogs are cancelled.

  • All local and remote branches are now available.

  • Git synchronization now updates the local list of branches.

  • Fix the height of the error dialog.

  • Do not log git branch commands.

  • Version control information and file information are now two distinct dialog boxes.

Version control dialog

  • Always open the dialog, even if there is nothing to commit.

  • Add a version control history tab.

  • Hide the modification tab if there is no changes.

Welcome dialog

  • Sound and animation on a few specific dates. :-)

  • Use a lighter version of the blue color.

Translations

  • Update German translation

  • Update French translation.

  • Update Italian translation.

  • Updated Brazilian Portuguese translation.

Miscellaneous

  • Update Gambas fonts.

  • Make Gambas 16 pixels size font less round and fix many characters.

  • Move the bytecode folder instead of copying it.

  • Add .startup, .list and .info to projet default gitignore file.

  • Update financial support list.

  • Update Zen color theme.

  • If chromium is selected as default browser, then stable Google Chrome can be used if Chromium is not installed.

  • Do not crash if the layout user directory does not exist yet.

  • Add support for test modules.

  • Use bold text instead of shadows to display project titles.

  • Relative paths on command-line are now assumed to be relative to the current working directory.

  • Ignore untranslated title and description when displaying project information.

  • The first opening of the console waits a bit so that the arrangement of its container is made.

  • Add gb.test.tap to the list of components.

  • Allow any form family to use the menu editor.

  • Support for custom stock icons sizes depending on the form family.

  • Support for gb.web.gui component.

  • Redraw the module icons.

  • Hitting ESC key when the focus is on the console immediate command textbox now always closes the console tab.

  • Change the version control synchronize icon to the download icon.

  • Use global constants for IDE blue and orange colors.

  • Use -r interpreter option to redirect standard error output.

  • Ignore hidden components specified in the project file.

  • Automatically load gb.test information.

  • Get rid of big orange panels.

  • Redraw the class symbols icons, and make them adapt to the desktop font size.

  • Start to clean up the image directory.

  • Use new stock icons.

  • Remove some useless icons.

  • Remove dark versions of many icons, now they are automatically generated.

  • Better default IDE configuration.

  • Check for duplicated class files when opening a project.

  • Do not set current project bookmark if opening the project fails.

  • Update financial support file.

  • Support for the new gb.poppler component.

  • Implement "save as" action for external files.

WIKI

  • Fix author and translator page.

  • Implement help command that inserts help defined in source code comments.

  • Use the full page width.

  • The @help command now can retrieve class help comments.

  • Undo is now possible if the page does not exist.

  • Handle custom array classes automatically.

  • Add command-line options to find or replace a string in all wiki pages.

  • Add a command-line option to print the package table.

  • The Italian translations are now complete.

WEB SITE MAKER

  • Added Brazilian Portuguese translation.

EXAMPLES

  • Add debugging messages to the Printing example and use full page to print.

INTERPRETER

  • Read-only arrays are now really read-only.

  • Add a -t option that dumps to the standard error the position of each executed line of code.

  • Floating-point number to string conversion is now 1.7 times faster.

  • System.Trace is a new property that toggles the dump of the position of each executed line.

  • Add command-line help for the -t option.

  • Do JIT compilation after class loading. Otherwise the JIT compiler may want to load the class that triggers the compilation again.

  • Remove a useless global variable.

  • Fix exponent sign printed twice in float to string conversion.

  • Fix Find() method on Float, Single, and Long arrays.

  • Fix compilation of function calls with variable arguments passing.

  • Disable some compiler warnings that generate false positives.

  • Fix static array management. They are not read-only anymore. Only methods that want to modify the size of the array are forbidden, as well as the ReadOnly property.

  • Reading a string on a memory stream now correctly skip the terminating null byte.

  • Fix serialization of NULL values.

  • Remove an old debugging message displayed when writing a pointer to a stream.

  • Stream.NullTerminatedString is a new property that tells if writing a string on the stream emits the string length first, or a null terminated zero byte. This property is TRUE by default on memory streams.

  • OPEN NULL is a new syntax that opens a null stream. Reading always returns end of file, and writing does nothing except advancing the file pointer, allowing to know how many bytes were written.

  • Rename macro that convert a Gambas stream object to the internal stream structure and add a macro that does the reverse conversion.

  • _read and _write are two new special methods that allow to make any object serializable by the READ and WRITE instructions.

  • Serializing an object is not ambiguous anymore.

  • Use one byte for writing the class name length when serializing objects.

  • Memory-mapped component archives file descriptors are now automatically closed when a child process is executed.

  • WAIT NEXT is a new instruction that waits for the next event and process it.

  • Signals are now correctly unregistered if the program exits during a signal handler.

  • Object.Count() does not fail anymore if the object is invalid.

  • A class can declare a public _invalid boolean variable. The value of that variable will indicates if the object is invalid.

  • gbx3 -L now displays the same Gambas version as gbx3 -V.

  • Error.Text, Error.Where and Error.Backtrace are now available inside the Application_Error handler.

  • Check special methods return value datatype and raise a dedicated error if it is incorrect.

  • Opening a pipe for reading does not block anymore if the pipe has not been opened for writing yet. It help synchronizing applications using the same pipe a lot!

  • Add class name in incorrect symbol declaration error message.

  • Fix possible memory leaks when reading objects or variants with the READ instruction.

  • Application.ParentHandle is a new property that returns the parent process id.

  • Fix release of return value of JIT methods called from non-JIT methods.

  • Internal name of libraries uses a point now between vendor and library name, not a slash anymore.

  • Running a process without an event name does not reference its observer for nothing anymore.

  • IsAscii(), IsLower(), IsPunct()... instructions are now a bit faster.

  • PEEK is a new instruction that peek some bytes from a stream without removing them, so that they are available to the next READ instruction.

  • VarPtr() on variants now returns a pointer to the variant contents.

  • VarPtr() on local strings are forbidden again.

  • Converting a string to a pointer returns a pointer pointing at the beginning of the string.

  • Call the event loop just after the JIT compiler has aborted, so that its processes are correctly freed.

  • &= operator optimization.

  • Strings greater than 4096 bytes are allocated by 4096 bytes steps.

  • Support for JIT &= optimization.

  • Enabling an already enabled timer has no effect anymore.

  • Use -r option now to redirect standard error output. No conflict anymore with -t.

  • Update help message and display options in alphabetic order.

  • Add -T option to run test modules.

  • Interpreter options now accept a void argument.

  • Automatically load gb.test component when the -T option is used.

  • Make READ and INPUT return void strings instead of NULL, otherwise JIT compiler fails.

  • Make a public function static.

  • Use time_t in GB.MakeDateFromTime API.

COMPILER

  • Correctly generate metadata file for events so that there is no spurious ByRef arguments anymore.

  • Remove some useless structure packing directives.

  • Fix compilation of function calls with variable arguments passing.

  • Correctly detect help comments in all cases.

  • Allow initialization of variables associated with property declaration.

  • Allow static arrays to be used with the point operator.

  • OPEN NULL is a new syntax that opens a null stream.

  • Function names can be put between parenthesis to disable possible warnings on them.

  • Support for the new WAIT NEXT instruction.

  • Workaround a gcc 8 compiler optimization bug.

  • Fix a comment typo.

  • Support for the new PEEK instruction.

  • Support for test modules.

  • Fix an uninitialized local variable.

  • Do not crash anymore by looking for help comments in form files when controls are public.

  • Support for &= operator optimization.

  • Automatically add gb.test component information when a project includes a test module.

  • Order options in displayed help.

  • Output a class flag for test modules.

  • Fix compilation of OPEN STRING instruction that sometimes failed.

  • Remove now useless structure fields.

ARCHIVER

  • Support for test modules.

  • Order options in displayed help.

INFORMER

  • Redesign verbose messages. Do not print anything if verbose mode is off, except warning messages.

  • Order options in displayed help.

  • If a component includes the information of one component among many, do not fail if the first one does not exist. Try the other ones.

SCRIPTER

  • Order options in displayed help.

AUTHORS

  • Added a new italian translator.

BENCHMARKS

  • Add a new string benchmark.

GB.ARGS

  • Updated Brazilian Portuguese translations.

GB.DB

  • Add DB.LastInsertId, the static version of Connection.LastInsertId.

  • Connection.ApplyTemplate() now updates existing tables.

  • Connection.Url is a new property that returns the URL of the connection.

GB.DB.FORM

  • DataView: Add SelectAll() and UnselectAll() methods.

  • Updated Brazilian Portuguese translations.

GB.DB.MYSQL

  • Add support for GB_DB_MYSQL_NOSSL environment variable, that allows to disable SSL connections. They are buggy in some versions of the mysql client library.

  • Make gb.db.mysql compile with older versions of MySQL.

  • Make gb.db.mysql compile with MySQL version >= 8.0.1.

  • Detect SSL_MODE_DISABLED at configure time, to make the component compile on older mysql clients.

  • Print a warning message if disabling SSL connection is not supported.

GB.DB.POSTGRESQL

  • Fix a possible buffer overflow.

  • Add license exception for OpenSSL.

  • Do not put explicit copyright holder name in the COPYING file.

GB.DB.SQLITE3

  • Fix memory leak in Connection.LastInsertId implementation.

GB.DBUS.TRAYICON

  • Use the Unity protocol on all desktops.

GB.DEBUG

  • Debug.Fifo is a new property that returns the name of the FIFO used for communication with the IDE.

GB.DESKTOP

  • DesktopFile: Fix the case of the "exist" symbol that is used as a public method name.

GB.DESKTOP.X11

  • X11Systray: System tray now works with QT5. A display glitch remains.

  • X11Systray: Show() now takes the icon background color as second optional argument. The default color is black.

GB.DRAW

  • Paint: TextHeight is a new property that returns the height of one line of text. This is not the same as Paint.Font.Height, as the device resolution is taken into account.

GB.EVAL

  • Don't highlight Null as constant inside the new OPEN NULL syntax.

  • Do not crash anymore when analyzing a line that ends with a { character.

  • Add Highlight.Added and Highlight.Removed style constants.

GB.EVAL.HIGHLIGHT

  • Fix highlighting of long lines and comments.

GB.FORM

  • ButtonBox: Settings the Filter property to FALSE correctly destroy the internal associated button, and prevent the control to crash if you set the property again.

  • ButtonBox: Custom buttons added with _AddButton() are now always between the clear button, and the standard button.

  • ButtonBox: Filter icons are now a little darker.

  • ColorChooser: Use icons instead of labels for color components.

  • DirChooser: ShowToolbar is a new property that toggles the toolbar.

  • DirChooser: Custom bookmarks are now correctly refreshed when they change.

  • DirView: Do not display an error when a directory is unreadable.

  • DocumentView: Some little design changes.

  • FileChooser: Correctly deal with & in bookmark names.

  • FileChooser: Add a separator above the bottom filters when Border property is unset.

  • FileChooser: ShowToolbar is a new property that toggles the toolbar.

  • FileChooser: Custom bookmarks are now correctly refreshed when they change.

  • FileProperties: Click is a new event that is raised when a tab is selected.

  • FileProperties: Index is a new property that returns or sets the current tab index.

  • FileProperties: Add() now returns the index of the added tab.

  • FileProperties: Adding a tab does not raise the Click event anymore.

  • FileProperties: Fix an error triggered by the preview.

  • FileView: Display a lock icon when a directory is unreadable.

  • FileView: Display a text inside the view when a directory is empty.

  • FontChooser: Initializing the font tree is now a lot faster.

  • IconPanel: Scale the panel icons so that each panel title has the same height.

  • ListEditor: Activate event is now emitted if the user clicks twice on the list.

  • ListEditor: Unique is a new property that ensures that all ListEditor elements are unique.

  • ListEditor: Add Remove() method.

  • ListEditor: Add Find() method.

  • ListEditor: Add Index property.

  • ListEditor: Text property now returns or sets the text currently edited.

  • ListEditor: The insert button text is now "Add".

  • MenuButton: Correctly deal with & shortcut character.

  • SliderBox: The default value is now applied when double-clicking on the spinbox, not the slider.

  • SliderBox: Add a Picture property.

  • Spinner: Add a Padding property.

  • Stock: Analyze icon directories in alphabetic order, so that numeric directory names are always identified first.

  • Stock: Better support of some icon themes.

  • TabPanel: Add TabBarPaddingStart and TabBarPaddingEnd properties. They allow to define space on the left and the right of the tab bar, so that you can put some widgets on top.

  • TabPanel: Fix tab bar layout routine.

  • TabPanel: The "close all" button is now drawn after the right padding.

  • TabPanel: TabBarSize is a new property that returns the height of the tab bar.

  • Use the KDE SVG version of Tux that is a lot smaller.

  • Add may new stock icons.

  • Update translations.

GB.FORM.DIALOG

  • Updated Brazilian Portuguese translation.

GB.FORM.EDITOR

  • TextEditor: Highlight the entire current line when it is wrapped.

  • TextEditor: Add support for integrated diff mode.

  • TextEditor: CTRL+F opens a simple text search field inside the editor.

  • TextEditor: Add F3 and SHIFT+F3 shortcuts for searching forward and backward in the text search popup.

  • TextEditor: TextEditor[].Purge() works as expected now.

  • TextEditor: Do not use Application.Busy in Load() and Save() methods.

  • TextEditor: String closing routine should be less stupid now.

  • TextEditor: Draw wrapped lines with little arrows at the end.

  • TextEditor: Moving down now should work as expected on wrapped lines.

  • TextEditor: Inserting a string delimiter at the beginning of the line does not crash anymore.

  • TextEditor: Bold text is made bolder when the background is dark.

GB.FORM.MDI

  • ToolBar: Draw a selected border in design mode.

  • Toolbar: SetLayout() is a new static method that defines the saved layout of a toolbar from its key.

  • Toolbar: GetLayout() is a new static method that returns the saved layout of a toolbar from its key.

  • Toolbar: Settings is a new property that allows to return or set the toolbar layout as a string.

  • Workspace: Add TabBarPaddingStart and TabBarPaddingEnd properties. They allow to define space on the left and the right of the tab bar, so that you can put some widgets on top.

  • Workspace: Add a TabPanel property that returns the inner workspace tab panel.

  • Updated Brazilian Portuguese translations.

GB.FORM.PRINT

  • You can continue to freely zoom with the mouse wheel when current zoom is at 100%.

  • The paper size is correctly refreshed when the orientation is changed.

  • Add default margin properties to the Printer class (MarginTop, MarginBottom, MarginLeft and MarginRight).

  • Add component icon.

  • Updated Brazilian Portuguese translations.

  • Update project icon.

GB.FORM.STOCK

  • Redraw some icons, and add new ones.

  • Add a 128 pixels version of the colored directory icon.

  • Add 128 pixels version of many icons.

GB.FORM.TERMINAL

  • TerminalView: ReadOnly is a new property that makes the TerminalView ignore keyboard input.

  • TerminalView: Add a 2 pixels margin around the terminal contents.

  • TerminalView: Add a new popup menu entry to select all the text.

  • TerminalView: Automatic scrolling is not smooth anymore.

  • TerminalView: Automatic scrolling is disabled when the last terminal line is hidden.

  • TerminalView: Terminal output processing is now delayed until the control is visible and has been arranged, so that the terminal width is accurate.

  • TerminalView: Better default colors.

  • TerminalView: Reserve one pixel less between characters for bold text.

  • Document the component with help comments.

  • Move XTerm files to the hidden project directory.

  • Updated Brazilian Portuguese translations.

GB.GEOM

  • Remove unnecessary PACKED directives.

  • Fix some spaces in source code.

GB.GTK

  • TextBox: Add Placeholder property. Beware that it does nothing as GTK+2 entry widget does not support placeholder text.

  • Window: Add a State event that is raised when the window is minimized, maximized or set to full screen.

  • Windows whose Utility property is set now use _NET_WM_WINDOW_TYPE_DIALOG instead of _NET_WM_WINDOW_TYPE_DIALOG.

  • Do not imbricate focus events.

  • Paint.FontScale is now "transparent". Paint.Font.Size is not changed anymore when assigning the Paint.Font property.

  • TextBox and TextArea KeyPress events cannot be stolen by other controls anymore.

  • Support for the new WAIT NEXT instruction.

  • Fix Drag() that was returning the drag frame instead of the target control.

  • Printer.Paper now works as expected.

  • The Window State event is correctly raised now, and the state properties are now correctly synchronized.

  • Application.DarkTheme is a new property that returns if the current color scheme is dark.

  • Style.Name is now lowercase.

  • Mouse.Click is a new property that returns the click index in a multi-click event.

  • Negative values are replaced by zero when setting Application.Busy.

  • Opening a popup always raises it to the pop now.

GB.GTK3

  • TextBox: Add Placeholder property.

  • Window: Add a State event that is raised when the window is minimized, maximized or set to fullscreen.

  • Windows whose Utility property is set now use _NET_WM_WINDOW_TYPE_DIALOG instead of _NET_WM_WINDOW_TYPE_DIALOG.

  • Do not imbricate focus events.

  • Paint.FontScale is now "transparent". Paint.Font.Size is not changed anymore when assigning the Paint.Font property.

  • TextBox and TextArea KeyPress events cannot be stolen by other controls anymore.

  • Support for the new WAIT NEXT instruction.

  • Fix Drag() that was returning the drag frame instead of the target control.

  • Printer.Paper now works as expected.

  • The Window State event is correctly raised now, and the state properties are now correctly synchronized.

  • Application.DarkTheme is a new property that returns if the current color scheme is dark.

  • Fix Style.PaintCheck() and Style.PaintArrow() for GTK+ >= 3.14.

  • Style.Name is now lowercase.

  • Mouse.Click is a new property that returns the click index in a multi-click event.

  • Negative values are replaced by zero when setting Application.Busy.

  • Opening a popup always raises it to the pop now.

GB.GUI

  • Fix detection of GUI components and share some code with gb.gui.qt.

GB.GUI.BASE

  • GridView: Selecting while moving the mouse cursor now raises the Select event only when the mouse button is depressed.

  • GridView: Select event is not raised twice on click anymore.

  • IconView: Fix grid height computation.

  • IconView: Do not use rounded rectangles anymore for selection frames.

  • ListBox: Click event is now raised when the Index property is modified.

  • Message: The ENTER key now selects the button having the focus, not the default one, so that message boxes behave the same with GTK+ and Qt.

  • Message: Add a button in message boxes to copy the message in the clipboard.

  • Message: Message boxes now correctly handle multi-line text in buttons.

  • Paint: Paint.Check() is a new method that draws a check mark.

  • Picture: Fix how Picture[] interprets relative paths.

  • Picture: Picture[] now automatically inverts the image for dark themes.

  • ScrollArea: Do not show the shadows in some cases when they should not be visible.

  • TreeView: ShowCheck is a new property that uses checkboxes to handle selection mode.

  • TreeView: Fix right-to-left layout management.

  • TreeView: Take padding into account when interpreting mouse events.

  • TreeView: Use radio buttons when ShowCheck property is set with single selection mode.

  • TreeView: Calling Add() or Remove() now automatically cancels the current renaming.

  • TreeView: Fix multiple selection.

  • TreeView: Setting the Key value with an unknown key now unselects the current key.

  • TreeView: The Selection property now handles single selection mode correctly.

  • Fix drag & drop frame management.

  • Prevent possible flickering of drag & drop frame.

  • The DragLeave event is now emitted reliably when the mouse leaves the drag and drop frame.

  • Default message icons are now visible when gb.form component is not used.

  • Fix Drag() that was returning the drag frame instead of the target control.

  • Use the new Application.DarkTheme property.

  • Add translations.

GB.GUI.QT

  • Fix detection of GUI components and share some code with gb.gui.

GB.HTTPD

  • Do not use __DATE__ macro for reproducible builds.

GB.IMAGE

  • Remove some surprisingly useless duplicated code in image conversion.

  • Add an API to get the luminance of a color.

  • Color.Invert() is a new method to invert a color.

  • New dark theme color inversion algorithm.

GB.JIT

  • Support for read-only arrays.

  • Implement fast unsafe compilation of Byte@, Short@... functions, that just access memory without checking anything.

  • Fix static arrays management.

  • Add support for VarPtr() on variant variables.

  • Fix VarPtr() on function arguments.

  • Compiling libraries works now.

  • Correctly handle unary minus operator.

  • Support for the &= operator optimization.

  • Cosmetic changes.

  • Fix a badly written code that crashes on 32-bits CPU.

GB.MARKDOWN

  • Allow special commands to be inserted anywhere in the line, except the index one.

  • Lines beginning with # without a space after do not make the parser crash anymore.

  • Take anchors into account correctly when generating links.

  • Add a couple of tests for common problems.

GB.MEDIA

  • MediaPipeline: Play() now takes an extra optional argument that allows not to wait for the command completion.

  • GB_MEDIA_DEBUG is a new environment variable that toggles warning messages.

GB.MEDIA.FORM

  • MediaView: Muted is a new property that defines if the audio is muted or not.

  • MediaView: Volume is a new property to return or set the audio volume.

GB.NET.SMTP

  • SmtpClient: Add _= sequence in mime part boundaries, as this sequence should not be present in encoded data.

  • SmtpClient: Fix quoted-printable encoding of headers containing e-mail addresses.

  • SmtpClient: Clear() is a new method that clears all attachments.

  • SmtpClient: Make SmtpClient able to send multiple mails correctly.

GB.OPENSSL

  • An internal routine's return value was mismatched causing HMac to return without data whenever the digest method was found. (Bug#1725)

  • Add Scrypt function.

  • Add Pbkdf2 function.

  • Unnecessary kdf.h blocking Xenial.

  • KDF Functions under OpenSSL Class.

  • Declare longs as longs instead of integers.

  • RandomBytes length limit (1 - 0x7FFFEFF7).

  • Hash incorrectly allocated by sizeof a pointer.

  • Avoid doubles in integer power-of-two test.

  • Add beginning of a test suite.

GB.PDF

  • Raise minimal supported poppler version to 0.20.

  • Fix segfault with poppler > 0.83.

  • Make gb.pdf compile with poppler >= 0.85.

  • Rely on pkg-config only to detect poppler library.

  • Correctly disable gb.pdf component if pkg-config fails.

  • Mark gb.pdf as deprecated.

GB.POPPLER

  • New gb.poppler component that will replace gb.pdf. It is based on poppler-glib, except for rendering that is based on poppler-splash.

GB.QT4

  • TextBox: Add Placeholder property.

  • Window: set the window size at creation to 1x1, so that there is no default size.

  • Window: Add a State event that is raised when the window is minimized, maximized or set to fullscreen.

  • Windows whose Utility property is set now use _NET_WM_WINDOW_TYPE_DIALOG instead of _NET_WM_WINDOW_TYPE_DIALOG.

  • Control.Next and Control.Previous now never return invalid controls.

  • Do not imbricate focus events.

  • Apply Paint.FontScale only when Paint.Font is assigned. Not when one of the Paint.Font properties changes.

  • Paint.FontScale is now "transparent". Paint.Font.Size is not changed anymore when assigning the Paint.Font property.

  • Support for the new WAIT NEXT instruction.

  • Fix Drag() that was returning the drag frame instead of the target control.

  • Drawing on a cached DrawingArea does not display a warning message anymore.

  • Application.DarkTheme is a new property that returns if the current color scheme is dark.

  • Some theme-specific workarounds for Style paint methods.

  • Style.Name is now lowercase.

  • Mouse.Click is a new property that returns the click index in a multi-click event.

  • Modal windows are now actually modal before entering their Open event.

  • Negative values are replaced by zero when setting Application.Busy.

  • A modal window can be opened on top of a popup window without breaking the event loop.

GB.QT4.WEBKIT

  • Fix incorrect declarations of special methods.

  • Raise Progress evens later on the event loop, to avoir possible crashes of WebView methods.

GB.QT5

  • TextBox: Add Placeholder property.

  • Window: set the window size at creation to 1x1, so that there is no default size.

  • Window: Add a State event that is raised when the window is minimized, maximized or set to full screen.

  • Windows whose Utility property is set now use _NET_WM_WINDOW_TYPE_DIALOG instead of _NET_WM_WINDOW_TYPE_DIALOG.

  • Control.Next and Control.Previous now never return invalid controls.

  • Do not imbricate focus events.

  • Workaround "Setting a QCompleter on non-editable QComboBox is not allowed" message

  • Apply Paint.FontScale only when Paint.Font is assigned. Not when one of the Paint.Font properties changes.

  • Utility windows now kept being in front of their parent window correctly.

  • Paint.FontScale is now "transparent". Paint.Font.Size is not changed anymore when assigning the Paint.Font property.

  • Support for the new WAIT NEXT instruction.

  • Fix Drag() that was returning the drag frame instead of the target control.

  • X11 event filter correctly handle ClientMessage events now.

  • Drawing on a cached DrawingArea does not display a warning message anymore.

  • Application.DarkTheme is a new property that returns if the current color scheme is dark.

  • Some theme-specific workarounds for Style paint methods.

  • Style.Name is now lowercase.

  • Mouse.Click is a new property that returns the click index in a multi-click event.

  • Modal windows are now actually modal before entering their Open event.

  • Negative values are replaced by zero when setting Application.Busy.

  • A modal window can be opened on top of a popup window without breaking the event loop.

GB.QT5.WEBKIT

  • Fix incorrect declarations of special methods.

  • Raise Progress events later on the event loop, to avoid possible crashes of WebView methods.

GB.REPORT2

  • Font size is now the same whatever the printer resolution.

  • Added Brazilian Portuguese translations.

GB.SCANNER

  • Fix bug on the scanimage parser to take various configurations into account.

  • An example in the source that use gb.scanner abilities.

  • Better error management with an Error event.

  • Add PageBegin and PageEnd events to manage actions between each page.

  • Support for multiple scans from the feeder.

  • Use the stock scanner icon as project icon.

GB.SDL2

  • Support for the new WAIT EVENT instruction.

GB.SETTINGS

  • Settings.Clear() now takes an extra optional boolean argument that tells to remove slots recursively.

  • Display a better error message if the settings file directory disappeared.

  • Settings.Keys.All is a new property that returns an array of all children slot keys.

  • Settings.Keys.Exist() is a new method that returns if a specific child slot exists.

  • Settings.Keys.Count is a new property that returns the number of children slots.

  • Settings.Exist() is a new method that return if a specific settings key is set.

  • Settings.Count is a new property that returns the total number of settings.

GB.TEST

  • New component for unit tests.

GB.UTIL

  • ClassStat: Add the flag for test modules.

  • CsvFile: Charset now can be specified. If not specified, the first line of the files is used to guess if it could be WINDOWS-1252, or otherwise UTF-8.

  • CsvFile: Create() is a new method for opening a CSV file for writing.

  • CsvFile: Open() is a new method for opening a CSV file for reading.

  • CsvFile: Quote() is a new method that quotes a value for the CSV format according to its separator and escape characters.

  • Class.Stat() now understands the ".../" syntax to look for classes in the current project.

  • Process: Add Expect() method that allows to answer the prompts of interactive commands running in a virtual terminal easily (think about ssh, scp...).

  • String: PadRight() is a new method that pad a string to the right up to a specified length using a string pattern.

  • String: PadLeft() is a new method that pad a string to the left up to a specified length using a string pattern.

  • Date.ToISO8601() is a new function that converts a date to ISO-8601 format.

  • String.FromHTML() has better support for <p>, <ul>, <li> and <ol> markups.

GB.UTIL.WEB

  • JSONCollection.Copy() now correctly returns a JSONCollection object.

  • Converting a collection into JSON is a now a bit faster.

  • URL.Quote() now quotes spaces as "%20" and not "+" anymore.

  • URL.UnQuote() takes a new optional argument that prevent unquoting "+" into space.

  • Fix query encoding & decoding in URLQuery class.

GB.WEB

  • Fix session abandon.

  • Compress text responses if its size is greater than 512 bytes, not 128.

  • Response.Reset() allows to send the response again.

  • Response.Begin() now takes the content-type as optional argument.

  • Use System.Language if the Accept-Language HTTP header is void.

  • Request.Reset() is a new method that reads the request contents again.

  • CGI.Reset() is a new method that resets CGI variables to their initial values.

  • Response.SendFile() now correctly deals with relative paths.

  • CGI.All is a new property that returns a collection of all CGI environment variables.

  • Do not unquote "+" into space in query strings.

GB.WEB.FORM

  • Fix management of dynamically created popups.

  • Make table headers sticky.

  • Fix window buttons.

  • Document the component.

  • Update project title.

  • Fix a typo in WebMenu properties declaration.

  • Updated Brazilian Portuguese translations.

GB.WEB.GUI

  • New component that replaces gb.web.form.

GB.XML

  • Fix incorrect declaration of _put methods.