MantisBT - MPfm
View Issue Details
0000302MPfm[All Projects] Globalpublic2012-02-26 22:262013-06-24 12:53
ycastonguay 
ycastonguay 
highfeatureN/A
assignedfixed 
 
0.7.0.00.6.0.0 
0000302: Add support for multiple platforms using the Mono Framework (Linux, OS X, iOS, Android)
Mono is a C# cross platform open source implementation of .NET. It supports WinForms. http://www.mono-project.com/Main_Page [^]

Converting to Mono would make the application work on Linux and Mac OS X, *IF* the third party libraries can work on those platforms. They all theoretically support these platforms, but that doesn't mean they work under Mono on those platforms.

I ran the MoMA test (Mono Migration Analyzer) and it seems that converting to Mono wouldn't be that bad after all. The errors it gave are 98% because of using the Win32 version of bass.dll (P/Invoke). According to this thread (http://www.un4seen.com/forum/?topic=7260.0;hl=mono+linux [^]) if the Linux version is used, there are no P/Invoke problems.

More info:
http://www.mono-project.com/Interop_with_Native_Libraries [^]
http://www.mono-project.com/Guide:_Porting_Winforms_Applications [^]

-------

The prototype is sufficiently advanced to say that a Mono version will be done!
No tags attached.
parent of 0000305resolved ycastonguay Determine default audio configuration by platform (Linux/Mac) 
parent of 0000303resolved ycastonguay Change the way BASS plugins are loaded to support other platforms (Windows/Linux/Mac) 
parent of 0000308resolved ycastonguay Add a GTK# project to the solution (for Linux) 
parent of 0000309resolved ycastonguay Add a MonoMac project to the solution (for Mac OS X) 
parent of 0000323resolved ycastonguay Remove the dependency for the Reactive Extensions 
parent of 0000322resolved ycastonguay Remove the dependency for the Async Framework 
parent of 0000324assigned ycastonguay Use a MVP-style pattern to centralize code for UI on multiple platforms 
parent of 0000381assigned ycastonguay Implement the MPfm.MVP views in MonoMac (Mac OS X 10.6+) 
parent of 0000382assigned ycastonguay Implement the MPfm.MVP views in GTKSharp (Linux) 
parent of 0000394assigned ycastonguay Implement the MPfm.MVP views in a lightweight console application 
parent of 0000405assigned ycastonguay Implement the MPfm.MVP views for iOS 
parent of 0000406assigned ycastonguay Implement the MPfm.MVP views for Android 
parent of 0000422assigned ycastonguay Implement the MPfm.MVP views for Windows 
Not all the children of this issue are yet resolved or closed.
html output.html (440,936) 2012-02-26 22:27
http://mp4m.org/mantis/file_download.php?file_id=1&type=bug
Issue History
2012-02-26 22:26ycastonguayNew Issue
2012-02-26 22:26ycastonguayStatusnew => assigned
2012-02-26 22:26ycastonguayAssigned To => ycastonguay
2012-02-26 22:27ycastonguayDescription Updatedbug_revision_view_page.php?rev_id=130#r130
2012-02-26 22:27ycastonguayFile Added: output.html
2012-02-26 22:29ycastonguayNote Added: 0000447
2012-02-29 17:05ycastonguayNote Added: 0000448
2012-02-29 18:14ycastonguayNote Added: 0000449
2012-02-29 18:15ycastonguayNote Edited: 0000448bug_revision_view_page.php?bugnote_id=448#r132
2012-03-10 07:27ycastonguayNote Added: 0000469
2012-03-10 08:53ycastonguayNote Deleted: 0000469
2012-03-11 19:24ycastonguayNote Added: 0000471
2012-03-11 19:24ycastonguayStatusassigned => resolved
2012-03-11 19:24ycastonguayFixed in Version => 0.6.0.0
2012-03-11 19:24ycastonguayResolutionopen => fixed
2012-03-11 19:35ycastonguayStatusresolved => assigned
2012-03-11 19:36ycastonguaySummaryCheck if the project could be converted to Mono (support for Linux and Mac OS X) => Add support for the Mono Framework (support for Linux and Mac OS X)
2012-03-11 19:36ycastonguayDescription Updatedbug_revision_view_page.php?rev_id=133#r133
2012-03-11 19:37ycastonguayRelationship addedparent of 0000306
2012-03-11 19:37ycastonguayRelationship addedparent of 0000305
2012-03-11 19:38ycastonguayRelationship addedparent of 0000303
2012-03-11 19:38ycastonguayRelationship addedparent of 0000304
2012-03-11 22:33ycastonguayRelationship addedparent of 0000308
2012-03-11 22:34ycastonguayRelationship addedparent of 0000309
2012-03-20 21:00ycastonguayTarget Version0.6.0.0 => 0.7.0.0
2012-03-31 09:53ycastonguayRelationship addedparent of 0000323
2012-03-31 09:53ycastonguayRelationship addedparent of 0000322
2012-03-31 09:54ycastonguayRelationship addedparent of 0000324
2012-06-09 14:18ycastonguayRelationship addedparent of 0000381
2012-06-09 14:20ycastonguayRelationship addedparent of 0000382
2012-07-03 20:09ycastonguayRelationship addedparent of 0000394
2013-01-11 17:55ycastonguaySummaryAdd support for the Mono Framework (support for Linux and Mac OS X) => Add support for multiple platforms using the Mono Framework (Linux, OS X, iOS, Android)
2013-01-11 17:59ycastonguayRelationship addedparent of 0000405
2013-01-11 18:14ycastonguayRelationship addedparent of 0000406
2013-06-24 12:53ycastonguayRelationship addedparent of 0000422

Notes
(0000447)
ycastonguay   
2012-02-26 22:29   
The Async framework and Reactive Extensions might not work at all under Mono.
(0000448)
ycastonguay   
2012-02-29 17:05   
(edited on: 2012-02-29 18:15)
After some testing, I was able to do a very simple prototype with the BASS library. It indeed works using Mono on Linux and Mac OS X.

The next step is deciding on a UI framework. Technically, Mono supports Windows Forms but when I tried to run MPfm on Mono, the designer.cs files gave a lot of errors. The SplitContainer does not seem to be supported.

So maybe WinForms can be kept for Windows, but GTK could be used for Linux and Mac. MonoMac + Cocoa can be used for Mac too; it doesn't require a UI framework to run, only Mono installed. The native controls are used instead. However, that would mean a different UI toolkit for each platform.

I'm also looking at what can be bundled as an app for the Mac App Store (Mono, GTK). If GTK can be used, that could be a better idea than having 3 different UI toolkits.

http://www.mono-project.com/Gui_Toolkits [^]
http://stackoverflow.com/questions/751884/winforms-vs-gtksharp-with-mono [^]

(0000449)
ycastonguay   
2012-02-29 18:14   
Mono supports SQLite natively for .NET 4.0. The code seems slightly different than what is used in Windows though, so maybe an interface should be added to the Gateway class.

http://www.mono-project.com/SQLite [^]
(0000471)
ycastonguay   
2012-03-11 19:24   
I've pushed the prototype further and now the Player class is 90% functional under Mono. The gapless playback and sync points work so far on Linux.