← Back to team overview

kicad-developers team mailing list archive

Re: [PATCH] RFC: toolbar button support for action plugins


Ok, tested this further and thought that it's silly that buttons on toolbar
have icons but menu items have generic hammer.

Second patch adds icons to menu and fixes compatibility with plugins that
don't define icon.

[image: actionmenu.png]

If icon file doesn't exist or can't be loaded (wrong format for example)
pcbnew will throw an error message
and will continue with no button for that plugin and generic hammer icon in
menu. I think that's reasonable
behavior since it lets user know that the plugin is somewhat broken, but
let me know if you want me to
change it.


On Wed, Aug 15, 2018 at 2:31 AM Andrew Lutsenko <anlutsenko@xxxxxxxxx>

> Hi KiCad devs,
> I am proposing an addition to plugin system.
> Probably most will agree that menus suck. Toolbars suck less :)
> In my plugin I added a dirty hack to modify top toolbar from plugin init
> code to add a button
> that calls plugins run() method. It is broken on linux X11 and is not a
> sustainable way others
> can add buttons in their plugins. But having a button was quite popular
> among users so I
> decided to implement this functionality directly in pcbnew.
> I introduced one more field plugin writers can define in defaults() that
> contains path to png icon
> and if that string is not empty, pcbnew will attempt to load that icon and
> add a button to top
> toolbar with action that calls the same run() method. I traced in code how
> plugin action menu
> is generated and added similar logic for buttons.
> Here is how the result looks like:
> https://i.imgur.com/f3xg1FE.gif
> Sample dummy plugin __init__.py code:
> import os
> import pcbnew
> import wx
> class Plugin1(pcbnew.ActionPlugin):
>     def defaults(self):
>         self.name = "Dummy Plugin 1"
>         self.category = "Read PCB"
>         self.description = ""
>         self.icon_file_name = os.path.join(os.path.dirname(__file__),
> 'icon.png')
>     def Run(self):
>         wx.MessageBox("Plugin 1")
> Plugin1().register()
> It's as simple as that.
> The patch is attached. It probably needs some error checking but seems to
> be working great.
> Tested in win64 so far.
> I'm open to suggestions on how to get it to good state, I will also test
> on linux asap.
> Regards,
> Andrew

PNG image

Attachment: 0002-Add-icons-to-action-menu-items-as-well.patch
Description: Binary data

Follow ups