Objo Studio v26.10.4 Released

I'm very happy to announce the immediate availability of Objo Studio 26.10.4.

There are 67 completed items in the release tracker this time, including reference-aware renaming, new desktop video and PDF viewers, and reusable Web containers. There are also new controls for both Desktop and Web, improvements to application icons, and another update to the Plugin SDK.

Download Objo Studio 26.10.4

Rename symbols and their references

Renaming something in an application should be straightforward, even when it’s used in several places.

Studio’s new Rename Symbol command updates a declaration and the references that resolve to it throughout the open solution. You can rename variables, parameters, methods, properties, classes and other supported symbols without finding and editing every use yourself.

Place the caret on a name and press F2, or choose Edit > Rename Symbol.... Editing an existing declaration’s Name field uses the same process.

Studio checks the proposed name for conflicts and shows a preview before applying the changes. It also updates the relevant designer references and control handler names, keeping the visual design and source code together.

The complete rename is undoable in one step, including changes across multiple sources.

The Rename Symbols documentation covers the supported targets and scope.

Video and PDFs in desktop applications

Desktop projects gain two useful viewers.

VideoPlayer plays video and audio from local files, bundled project resources and HTTP or HTTPS media URLs. It includes playback controls, seeking, volume, muting, looping and options for fitting the video to its available space.

The video runtime travels with your built application, so your users don’t need to install VLC or a separate codec package. Studio includes that runtime only in applications that use video.

Open the new Desktop Video Player example to try the different loading and playback options.

PDFViewer brings PDF display to desktop windows, with selectable text, page navigation, zoom, fit modes and a Save Copy action. Load a local file, a project resource or PDF bytes generated by your application.

The renderer ships with the application and works offline. The bundled Desktop PDF Viewer example demonstrates the different ways to load a document.

More controls for Desktop and Web

Three new controls are available in both visual designers:

  • SegmentedButton presents related choices in a compact joined group, such as Day / Week / Month or List / Grid. It supports single or multiple selection and optional symbols.
  • RadialGauge displays a value as a ring or partial arc, with a central value, caption and configurable colour thresholds.
  • MeterBar shows capacity, usage or progress, with an integrated value label, colour thresholds and optional stacked segments.

There’s also a new ListBox Dashboard example. It demonstrates two-line cells, owner initials, status chips, sparklines, capacity bars and row actions using the existing ListBox drawing APIs, along with searching and sorting.

I’m looking forward to seeing what people build with these.

Design a Web container once and reuse it

Web projects now support reusable ContainerControl definitions.

Choose Insert > Web Container Control, design a group of controls and their event handlers, then place instances on your pages from Project Controls in the Control Library.

Each instance has its own state and handlers. Editing the shared definition updates every placement, and the container has its own Compact, Medium and Wide layouts.

This is useful for things such as repeated form sections, summary cards and shared panels that would otherwise need to be maintained separately on several pages.

The new Web Container Workshop example walks through independent counter cards and reusing their definition on another page. The ContainerControl documentation explains the details.

Web applications also gain supported Remember me logins, with configurable expiry and revocation. The complete Remember Me Login example demonstrates signing in, returning in a fresh session, expiry and signing out.

Let Studio generate interface members

Implementing an interface now involves less typing.

When you choose a class’s interfaces in the Inspector, Generate missing members is selected by default. Studio adds the required methods, properties and event definitions, ready for you to fill in their behaviour.

Existing implementations are preserved, including inherited ones.

There’s also an Edit > Generate Missing Interface Members command for doing this later. It’s particularly useful when you add another member to an interface that several classes already implement.

Give small application icons their own artwork

A large application icon doesn’t always make a good small one.

Desktop projects can now supply artwork for individual icon sizes, alongside the existing default PNG. Studio generates any missing sizes automatically, and you can also import the representations from a Windows .ico file.

The new Application Icons dialog previews the different sizes and identifies which contain supplied artwork and which are generated.

Open it from Edit Icons in the application Inspector, or from Project Settings. The configured artwork is used when running, debugging, building and publishing your application.

More possibilities for plugins

This release is accompanied by Plugin SDK 1.4.0, with two additions for plugin authors.

Plugins can now hold an opaque reference to an Objo object and return that same object later, preserving its identity. This is useful for generic containers, script-engine variables and Tag-like values.

Plugins can also receive method references through AddressOf and call them synchronously during plugin calls, receiving a result. That opens up APIs such as comparators and script-engine callbacks.

The updated SDK is available from the public Plugin SDK repository, with the supported signatures and ownership rules covered in the SDK reference.

Some smaller additions

A few other changes deserve a mention:

  • Keyword casing in Settings lets you choose Canonical, Lowercase or Preserve as typed.
  • Copying folders and modules in the Solution Navigator includes their nested source items. Moving a module brings its nested items along too.
  • The standard Edit menu is editable in the designer, including captions that use project localisation.
  • RadioButtonGroup gains row height, spacing and horizontal layout options.
  • Conditional compilation gains TargetWindows, TargetMacOS and TargetLinux.
  • TreeView gains convenient methods for visiting root nodes, immediate children or every node.
  • AI Assistant response limits are configurable, and turning off thinking explicitly requests that Ollama disable it.

Fixes worth mentioning

The editor received particular attention. Pasting and undoing in the Find popup no longer affects project code, deleted control handlers no longer remain displayed in Code view, and saving retains the correct event-handler header and signature settings.

Desktop fixes cover TabPanel keyboard navigation and change events, ListBox mouse handling, dropdown focus, slider alignment and runtime menu updates on macOS.

Source Control now includes plugin lock changes and avoids repeatedly reporting unchanged menu bars on Windows. Plugin startup failures also produce clearer diagnostics in Studio, and macOS applications can start correctly with third-party native plugins.

You’ll find the complete list in the changelog.

Download Objo Studio 26.10.4, try the new examples, and let me know how you get on in the forums.

Thank you to everyone who has reported problems, requested features and shared examples of what they’re building. Those conversations make a real difference to each release.

Enjoy!