cosmigo / pmotion-purebasic

Cosmigo Pro Motion NG plugins interfaces in PureBasic
Other
4 stars 0 forks source link

Fix progressCallback Bug #6

Closed tajmone closed 3 years ago

tajmone commented 3 years ago

In the PureBasic File I/O plug-in template progressCallback() needs to be defined in the main body, and then Shared inside setProgressCallback() (either that or just define it as Global), otherwise it won't be available to other procedures.

Also, the following line need to be fixed:

progressCallback.ProtoProgressCallback = @*progressCallback

it should be = *progressCallback!

tajmone commented 3 years ago

NOTE — I'm not sure whether it's better to just declare progressCallback as Global or define it in main code and have end users resort to Shared in any procedure which needs to call it.

The point is that in PM NG there's no longer a progress bar showing the percentage, so it's usually enough to just call it once (passing 1) at the beginning of a file processing task, and once more at the end (passing 100).

The argument in favor of keeping it global would be for backward compatibility with older PM versions — in that case, end user would need to call it at different steps, using percentage values.

It ultimately boils down to whether authors using this template are planning to use this callback in the old fashion or just at the start and end points of a processing task (or maybe not even that).

I'll have to think about it, and the pros and cons of each approach.

tajmone commented 3 years ago

pmotion2svg Example

For a practical and working implementation, see:

https://github.com/tajmone/pmotion2svg/blob/1.1.0/src/pm-interfaces.pbi#L57

Prototype ProtoProgressCallback( progress.l )
Global progressCallback.ProtoProgressCallback

ProcedureDLL setProgressCallback( *progressCallback )
  progressCallback = *progressCallback
EndProcedure