kicad-developers team mailing list archive
-
kicad-developers team
-
Mailing list archive
-
Message #37275
Re: [PATCH] RFC: toolbar button support for action plugins
Andrew,
I merged your patch into the development branch. Thank you for your
contribution.
Cheers,
Wayne
On 8/27/2018 12:26 AM, Andrew Lutsenko wrote:
> Awesome!
>
> I updated the docs for plugin writers. Please see attached file.
>
> On Sun, Aug 26, 2018 at 7:48 PM Seth Hillbrand <seth@xxxxxxxxxxxxx
> <mailto:seth@xxxxxxxxxxxxx>> wrote:
>
> Merged.
>
> Thank you for your contribution to KiCad!
>
> -Seth
>
> Am So., 26. Aug. 2018 um 13:27 Uhr schrieb Andrew Lutsenko
> <anlutsenko@xxxxxxxxx <mailto:anlutsenko@xxxxxxxxx>>:
>
> Thanks all for the review.
>
> Now that proposal is approved I'm not sure what next steps are.
> Only docs I could find on launchpad are about bazaar.
> But I would guess commit has to be manually merged. I attached
> approved revision of the patch here.
>
> On Thu, Aug 23, 2018 at 1:50 PM Seth Hillbrand
> <seth@xxxxxxxxxxxxx <mailto:seth@xxxxxxxxxxxxx>> wrote:
>
>
>
> Am Do., 23. Aug. 2018 um 12:38 Uhr schrieb Andrew Lutsenko
> <anlutsenko@xxxxxxxxx <mailto:anlutsenko@xxxxxxxxx>>:
>
> Thanks, I opened merge request on launchpad:
> https://code.launchpad.net/~qu1ck/kicad/+git/kicad/+merge/353677
>
>
> Excellent, thanks. I've added Jeff for a second set of eyes
> to look for possible Mac issues. I've added a few comments
> for formatting (they probably sound pedantic by now)and a
> couple suggestions. Once my comments are addressed, it
> looks good to me.
>
>
>
> > ACTION_PLUGINS::GetActionButton. Takes an integer and
> picks the element from the actions list vector. But
> std::vector[] doesn't provide bounds checking. You
> could use at() and catch the out_of_range error.
>
> That method is not used. I only added it because there
> was ::GetActionMenu, which has the same issue you
> mentioned. It is also unused, maybe I should remove both.
>
>
> Removing both is fine. If we do decide to leave them in for
> future implementation, they will need to be safe for callers.
>
> -Seth
>
>
> On Thu, Aug 23, 2018 at 10:56 AM Seth Hillbrand
> <seth@xxxxxxxxxxxxx <mailto:seth@xxxxxxxxxxxxx>> wrote:
>
>
>
> Am Do., 23. Aug. 2018 um 00:51 Uhr schrieb Andrew
> Lutsenko <anlutsenko@xxxxxxxxx
> <mailto:anlutsenko@xxxxxxxxx>>:
>
> I fixed whitespace issue and formatting (at
> least what I caught).
> Fixed a bug that would not load plugin list
> properly if one plugin was removed and another
> was added at the same time.
> Also made plugin buttons scale same as the main
> buttons.
>
> Please see updated patch attached.
>
> > You should protect array dereference indices
> to prevent overflow. It would be a good idea to
> define a specific "no icon" index (-1 maybe? or
> 0) that returns a default icon (0) or prevents
> an icon from being loaded (-1).
>
> I am not sure what place in code are you
> referring to here. Nowhere do I reference icons
> by index. Icons are fields of action plugins and
> I get them from a map, not a vector.
>
>
> ACTION_PLUGINS::GetActionButton. Takes an integer
> and picks the element from the actions list vector.
> But std::vector[] doesn't provide bounds checking.
> You could use at() and catch the out_of_range error.
>
>
>
> Would you prefer if I opened a PR on github? I
> know it won't be merged, just to make exchanging
> comments on code easier during review.
>
>
> No, I'd prefer not to split the conversation.
> However, you can make a branch on launchpad and then
> make a merge proposal. That should be the same
> workflow and keeps information on our primary
> platform. (see attached screenshot for details on
> where this button is hidden)
>
> -S
>
>
>
>
> Andrew
>
> On Wed, Aug 22, 2018 at 2:03 PM Seth Hillbrand
> <seth@xxxxxxxxxxxxx <mailto:seth@xxxxxxxxxxxxx>>
> wrote:
>
> Thanks Andrew, I'll have a chance to test
> this in detail this weekend. The movie
> looks really nice.
>
> Short comments:
>
> - You should protect array dereference
> indices to prevent overflow. It would be a
> good idea to define a specific "no icon"
> index (-1 maybe? or 0) that returns a
> default icon (0) or prevents an icon from
> being loaded (-1).
>
> - It looks like your editor doesn't
> automatically clear trailing whitespace at
> the end of lines. Can you check if there's
> an option in it that does that for you?
>
> - There are a couple small spacing errors
> (single line between function defs, space
> before closing parens)
>
> Overall, excellent work! This feels like a
> nice addition for people who regularly use
> plugins.
>
> -Seth
>
> Am Mi., 22. Aug. 2018 um 04:28 Uhr schrieb
> Andrew Lutsenko <anlutsenko@xxxxxxxxx
> <mailto:anlutsenko@xxxxxxxxx>>:
>
> Hi Seth,
>
> I built the settings dialog for action
> plugins. You can reorder and
> enable/disable buttons for each plugin
> individually.
>
> Short demo:
> https://i.imgur.com/33iJC7b.gif
>
> Squashed patch is attached. I've tested
> it on win, debian8 and debian9.
> If it's easier to review diff can be
> viewed here as well:
> https://github.com/KiCad/kicad-source-mirror/compare/master...qu1ck:plugin-icon
>
> Also I've attached few dummy plugins to
> play with, 3 out of 4 have icons.
>
> Let me know if you have any comments.
>
> Thanks,
> Andrew
>
> On Fri, Aug 17, 2018 at 3:02 PM Andrew
> Lutsenko <anlutsenko@xxxxxxxxx
> <mailto:anlutsenko@xxxxxxxxx>> wrote:
>
> Hi Seth,
>
> That makes sense. I will keep
> working on this feature and will
> ping this thread again once user
> configuration is implemented.
>
> Thanks,
> Andrew
>
> On Fri, Aug 17, 2018 at 10:03 AM
> Seth Hillbrand <seth@xxxxxxxxxxxxx
> <mailto:seth@xxxxxxxxxxxxx>> wrote:
>
> Hi Andrew-
>
> I like the patch idea and your
> implementation approach is good.
>
> The coding style policy is
> located
> at https://kicad-source-mirror.readthedocs.io/en/stable/Documentation/development/coding-style-policy/ ;
> We're not totally consistent but
> we try to ensure any new code
> follows it and clean up the old
> code as we go.
>
> On the errors, please don't
> throw an error to the user. It
> may be useful to insert a
> wxLog() call that we could
> utilize in the future but that
> is ignored for now.
>
> I'm opposed to merging patches
> that are partially complete.
> And I would consider the lack of
> user control over this feature
> problematic. This is not a
> judgement on the patch as you've
> implemented it. I really like
> the functionality and think
> KiCad users will appreciate it
> as well. However, a partially
> implemented feature creates the
> opportunity for problems down
> the road that will distract
> developer time from the other
> tasks they are working on. If
> you do not have the time to
> fully implement user control
> over this feature (I completely
> understand competing time
> pressures), you may consider
> opening a bug report and
> attaching your patch there for
> interested future developers.
> Squashing the patchset for
> review is also a good idea.
>
> Overall this looks really
> promising.
>
> Best-
> Seth
>
> Am Do., 16. Aug. 2018 um
> 23:02 Uhr schrieb Andrew
> Lutsenko <anlutsenko@xxxxxxxxx
> <mailto:anlutsenko@xxxxxxxxx>>:
>
> Hi Seth
>
> I just checked out new
> preferences in pcbnew, looks
> much more organized than before.
> I totally can add a new tab
> there "pcbnew->Action
> plugins" and list the
> plugins there with option
> to remove toolbar icon. But
> that is a non-negligible
> amount of work. Will you
> hold off on merging
> my current patches until I
> implement that too?
> By default plugins will not
> show any buttons on toolbar,
> plugin writers will have to
> explicitly update
> their plugins and provide an
> icon for them to show up so
> you will not run into an
> issue with full
> toolbar for a while. See my
> screenshot in second email
> of the chain, it has 4
> plugins but only
> 2 of them register with an
> icon and toolbar button.
>
> > headers get 1 space
> between function defs
> I tried to follow existing
> style in each file and
> didn't notice that it's not
> consistent across different
> files.
> action_plugin.h has two new
> lines between most functions
> but I can change it to one.
>
> What do you think about
> throwing an error to user if
> icon failed to load? Andrey
> Kuznetsov made a
> point that user can't do
> anything about it anyway. I
> agree that asking users to
> fix plugin icon declaration
> is a bit much and developer
> will be able to see that
> icon didn't load without the
> error too.
>
> Andrew
>
> On Thu, Aug 16, 2018 at
> 10:22 PM Seth Hillbrand
> <seth@xxxxxxxxxxxxx
> <mailto:seth@xxxxxxxxxxxxx>>
> wrote:
>
> Hi Andrew-
>
> I like the idea. Aside
> from minor formatting
> (headers get 1 space
> between function defs,
> need a space before the
> if block), the patch
> looks good.
>
> However, I wouldn't want
> everything showing on my
> toolbar (speaking as
> someone who has 10
> plugins installed, 5 of
> which get regular use).
> I'd prefer the option to
> be configurable. This
> should probably be in
> the preferences pane
> that Jeff has been
> re-working.
>
> -Seth
>
> Am Do., 16. Aug. 2018 um
> 22:11 Uhr schrieb Andrew
> Lutsenko
> <anlutsenko@xxxxxxxxx
> <mailto:anlutsenko@xxxxxxxxx>>:
>
> Hi Clemens,
>
> See sample plugin
> attached. Extract it
> into kicad's
> share/scripting/plugins
> folder.
> One of other scanned
> directories that
> are documented in
> kicadplugins.i
> <https://github.com/KiCad/kicad-source-mirror/blob/6fdc5972f8431b4d5831a32649e67bfe20d05de8/scripting/kicadplugins.i#L180> should
> work too.
>
> Or are you asking to
> update docs in the repo?
> Documentation/development/pcbnew-plugins.md
> seems like the right
> place.
> I will update it
> once committers
> agree with the path
> I've chosen to
> implement this.
>
>
>
> On Thu, Aug 16, 2018
> at 4:48 AM Clemens
> Koller
> <cko@xxxxxxxxx
> <mailto:cko@xxxxxxxxx>>
> wrote:
>
> Hello, Andrew!
>
> I am somehow
> missing the
> Python example
> you are giving
> in your patch.
> Can you add this
> a simple example
> to the sources
> to get a
> basic/dummy
> skeleton working
> right from scratch?
>
> Regards,
>
> Clemens
>
>
> On 15/08/2018
> 11.31, Andrew
> Lutsenko 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
> <http://self.name>
> <http://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
> <mailto:kicad-developers@xxxxxxxxxxxxxxxxxxx>
> > Unsubscribe :
> https://launchpad.net/~kicad-developers
> > More help :
> https://help.launchpad.net/ListHelp
> >
>
> _______________________________________________
> Mailing list:
> https://launchpad.net/~kicad-developers
> Post to :
> kicad-developers@xxxxxxxxxxxxxxxxxxx
> <mailto:kicad-developers@xxxxxxxxxxxxxxxxxxx>
> Unsubscribe :
> https://launchpad.net/~kicad-developers
> More help :
> https://help.launchpad.net/ListHelp
>
> _______________________________________________
> Mailing list:
> https://launchpad.net/~kicad-developers
> Post to :
> kicad-developers@xxxxxxxxxxxxxxxxxxx
> <mailto:kicad-developers@xxxxxxxxxxxxxxxxxxx>
> Unsubscribe :
> https://launchpad.net/~kicad-developers
> More help :
> https://help.launchpad.net/ListHelp
>
>
> _______________________________________________
> 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
>
References
-
[PATCH] RFC: toolbar button support for action plugins
From: Andrew Lutsenko, 2018-08-15
-
Re: [PATCH] RFC: toolbar button support for action plugins
From: Seth Hillbrand, 2018-08-17
-
Re: [PATCH] RFC: toolbar button support for action plugins
From: Andrew Lutsenko, 2018-08-17
-
Re: [PATCH] RFC: toolbar button support for action plugins
From: Seth Hillbrand, 2018-08-17
-
Re: [PATCH] RFC: toolbar button support for action plugins
From: Andrew Lutsenko, 2018-08-17
-
Re: [PATCH] RFC: toolbar button support for action plugins
From: Andrew Lutsenko, 2018-08-22
-
Re: [PATCH] RFC: toolbar button support for action plugins
From: Seth Hillbrand, 2018-08-22
-
Re: [PATCH] RFC: toolbar button support for action plugins
From: Andrew Lutsenko, 2018-08-23
-
Re: [PATCH] RFC: toolbar button support for action plugins
From: Seth Hillbrand, 2018-08-23
-
Re: [PATCH] RFC: toolbar button support for action plugins
From: Andrew Lutsenko, 2018-08-23
-
Re: [PATCH] RFC: toolbar button support for action plugins
From: Seth Hillbrand, 2018-08-23
-
Re: [PATCH] RFC: toolbar button support for action plugins
From: Andrew Lutsenko, 2018-08-26
-
Re: [PATCH] RFC: toolbar button support for action plugins
From: Seth Hillbrand, 2018-08-27
-
Re: [PATCH] RFC: toolbar button support for action plugins
From: Andrew Lutsenko, 2018-08-27