← Back to team overview

kicad-developers team mailing list archive

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

 

Please do not throw errors like unable to load icon to users, that is
extremely annoying to users. It is the developer's responsibility to make
sure the icon is loaded correctly, not the users, so users should not be
bothered, since they cannot do anything about it anyway.

On Thu, Aug 16, 2018 at 2:26 AM Andrew Lutsenko <anlutsenko@xxxxxxxxx>
wrote:

> 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.
>
> Regards,
> Andrew
>
> On Wed, Aug 15, 2018 at 2:31 AM Andrew Lutsenko <anlutsenko@xxxxxxxxx>
> wrote:
>
>> 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
>>
> _______________________________________________
> Mailing list: https://launchpad.net/~kicad-developers
> Post to     : kicad-developers@xxxxxxxxxxxxxxxxxxx
> Unsubscribe : https://launchpad.net/~kicad-developers
> More help   : https://help.launchpad.net/ListHelp
>
-- 
Remember The Past, Live The Present, Change The Future
Those who look only to the past or the present are certain to miss the
future [JFK]

kandrey89@xxxxxxxxx
Live Long and Prosper,
Andrey

PNG image


References