Adding Panels to the Workspace

You may want to write an extension that adds a panel which displays information to the user. Builder provides API for this via the “Editor Surface”.

At a high level, the design of the editor is broken into four parts.

  • The code editors in the center of the surface
  • The left panel, which contains the “sources” of actions
  • The bottom panel, which contains utilities
  • The right panel, which is transient and contextual to the operation at hand

The easiest way to add a panel is to register an Ide.EditorAddin which adds the panels in the do_load() function. You’ll be provided access to the editor surface with the editor variable.

# my_plugin.py

import gi

from gi.repository import GObject, Gtk, Dazzle, Ide

class MyEditorAddin(GObject.Object, Ide.EditorAddin):

    def do_load(self, editor: Ide.EditorSurface):

        # Add a widget to the left panel (aka Sidebar)
        self.panel = Gtk.Label(visible=True, label='My Left Panel')
        left_panel = editor.get_sidebar()
        left_panel.add_section('my-section',
                               'My Section Title',
                               'my-section-icon-name',
                               None, # Menu id if necessary
                               None, # Menu icon name if necessary
                               self.panel,
                               100)  # Sort priority

        # To add a utility section
        self.bottom = Dazzle.DockWidget(title='My Bottom Panel', icon_name='gtk-missing', visible=True)
        self.bottom.add(Gtk.Label(label='Hello, Bottom Panel', visible=True))
        editor.get_utilities().add(self.bottom)

    def do_unload(self, editor: Ide.EditorSurface):

        # Remove our widgets
        self.panel.destroy()
        self.bottom.destroy()

        self.bottom = None
        self.panel = None