Objo Studio v26.7.2 Released

The latest version of Objo Studio is out now!

As is the Objo way, we’ve fixed all reported bugs (38).

Before we get onto all the lovely new features, I would like to also announce that ObjoBasic has been renamed to Objo. Objo Studio is the IDE, Objo is the language. It’s a punchier name and we are early enough in Objo’s life that now is the time to rename if we were ever going to.

In addition I’m pleased to say we added twenty new features, the full details of which you can find in the changelog. However, as is tradition, I’d like to call out a few of my favourites for this release.

Comprehensive printing / printer support

It’s now possible to print from your desktop apps. We’ve added a cross-platform printing and PDF pipeline. You can discover available printers with Printers.Names() or create a PrinterSetup initialised with the available platform defaults using Printers.DefaultSetup. Configure its paper size, orientation, margins, and page range, then use it to create a PrintJob.

Set the job’s PageCount, handle its RenderPage event, and draw text, shapes, and images onto each page’s Graphics surface. The event fires once for each page in the selected range, leaving your app in control of pagination. Call Job.Run() to submit the job without showing a print dialog, Job.ShowPrintDialog() to let the user choose their settings, or Job.SavePDF(path) to save the same output as a PDF.

Under the hood, pages are rendered through Avalonia and SkiaSharp before being handed to the platform print system. Printing is supported on macOS, Windows, and Linux. To help you get started, we’ve included a bundled example called Printing Demo, available from Studio’s Solution Chooser.

ODBC database support

Objo apps can now connect to databases and other data sources through ODBC. The new ODBCDatabase class accepts both DSN and DSN-less connection strings and implements the standard Database interface, so you can use the familiar RecordSet, prepared statement, transaction, and table metadata APIs.

This opens the door to Microsoft Access databases on Windows, along with legacy and vendor-specific systems that provide an ODBC driver. Objo automatically includes ODBC support when your app references ODBCDatabase; you just need a compatible ODBC driver and driver manager installed on the target computer.

Var db As New ODBCDatabase("DSN=LegacyData")
db.Connect()

Var rows As RecordSet = db.SelectSQL("SELECT id, name FROM customers")
While rows.MoveToNextRow()
  Print(rows.Column("name").StringValue)
Wend

Configurable window toolbars

Desktop windows can now have fully configurable toolbars. Objo Studio now includes a dedicated Toolbar Editor where you can add and arrange buttons, toggle buttons, menu buttons, split buttons, separators, and fixed or flexible spaces. Toolbar items can use built-in system symbols or your own project images, including HiDPI variants.

Toolbars respond automatically as a window is resized, moving lower-priority commands into an overflow menu when space runs short. You can control label placement, visibility, overflow behaviour, tooltips, enabled state, and toggle state from the Inspector. Double-click an actionable item to generate its window event handler, just as you would for a control in the Window Designer.

Toolbars remain fully configurable at runtime, too: items can be added, removed, reordered, enabled, hidden, or updated while the window is open. Take a look at the bundled Toolbar Showcase example to see the new toolbar components in action.

More expressive Select Case statements

Select Case has become considerably more expressive. Cases can now match inclusive ranges using To, and ranges can be combined with individual values or other ranges in the same clause:

Select Case responseCode
Case 200 To 299
  Print("Success")
Case 301, 302, 307, 308
  Print("Redirect")
Case 400 To 499
  Print("Client error")
Else
  Print("Unexpected response")
End Select

You can also use Case IsA to branch according to an object’s runtime type. This makes it much cleaner to handle related objects without building a long chain of If...ElseIf checks:

Select Case control
Case IsA TextField
  TextField(control).Text = ""
Case IsA Button
  Button(control).Enabled = False
Else
  Print("Unknown control")
End Select

The selector is evaluated only once, cases are checked in order, and the first matching case wins. Together with exact-value and Case Is comparison matching, Select Case can now handle a much wider range of branching tasks cleanly.

We hope you like this release. As always it is available from the downloads page.

thank you Garry for this new update. I just downloaded and installed it.

I will start my epub creation application next month. Objo Studio looks more and more promising with each update. A good idea to change Objo Basic in just Objo.

Thank you for your hard work, which is appreciated.

Thanks for supporting Objo! If you hit any issues developing your app please let me know in the forums and I’ll try to help out.