← Back to team overview

kicad-developers team mailing list archive

Re: Decoupling issues with python

 

On 08/12/2012 03:34 AM, Miguel Angel Ajo Pelayo wrote:
>
>
> 2012/8/12 Lorenzo Marcantonio <l.marcantonio@xxxxxxxxxxxx
> <mailto:l.marcantonio@xxxxxxxxxxxx>>
>
>     I have two somewhat important issues with the python binding... as you
>     know I'm implementing the plot interface.
>
>     - Decoupling the message logs: for 'big' messages we usually show
>       message boxes; these *could* be acceptable for scripting (maybe
>       a better solution would be throwing an exception...) but other
>       messages (for example the 'created %s directory') are currently
>       hardwired to the text control in the dialog... this is a clear
>       'functionality tied to UI' issue (and MVC was created to address it);
>       sadly most (if not all) the features in kicad are similarily tied to
>       the UI code.
>
>
> Yes that was the UI coupling I talked about in the previous messages (what I'd seen when
> trying to let scripting plot), some refactoring might help.
>  
>
>     This makes difficult to export stuff to 'pure' scripting.
>       Currently I'm using an optional pointer to the message log box;
>       I don't know where these messages should go during scripting (standard
>       output? is it redirected to the python console?)
>
>
> This is something we should investigate how to do. Even some scripting output now
> doesn't go to the scripting console, the scripts launched from the console itself do,
> but the ones running as plugins or other stuff don't (adding that to the scripting TODO
> list right now).
>
> May be "text output messages" should be given to an optional callback function? (this
> way if we call plotting from UI we get the text back to UI, and if we call it from
> scripting we could provide a simple printer, or fetch it somewhere to get it back into
> another scripting-built-UI or whatever).
>
>  
>
>       Ideally a 'message log' interface should be defined with a couple of
>       implementations (message box and python log/whatever); this could be
>       used also in other situations requiring progress log;
>
>
> Yes, yes, it something that worth to think about. 
>
>  
>
>     - Access to core classes: from what I've seen of the python bindings it
>       seems that the root object is the BOARD, which makes sense; sadly the
>       plot routines at the moment are in the PCB_EDIT_FRAME (like a lot of
>       the operations); another issue of feature/UI intermingling. I'll try
>       to extract them from PCB_EDIT_FRAME and put them relative to the BOARD
>       or, better yet, externally; I'm not a fan of 'everything in classes':
>       external stuff should be externally (the old OO philosophical dilemma:
>       the BOARD drivers the PLOTTER, the PLOTTER reads the BOARD or
>       something else read the BOARD and drive the PLOTTER?). Also the
>       PCB_EDIT_FRAME has already way too methods, and a diet could improve
>       it :D
>


My idea was a BOARD_ACTIONS class, which could stand alone.  The UI code and scripting
both can call functions in that class.

Then you could use multiple inheritance and put BOARD_ACTIONS back into PCB_EDIT_FRAME as
one of two base classes supporting PCB_EDIT_FRAME.  This provides for the UI close to what
is happening now.

But since BOARD_ACTIONS could also stand alone, the scripting could use it in a form
independent of PCB_EDIT_FRAME.  

That might give you the best of both worlds then.

Another nice thing about this design and plan is that it can be done evolutionary, i.e.
over time.




Follow ups

References