Omnis Weblib for Studio 5 -- Work in Progress

David McKeone david at artsman.com
Tue Aug 26 10:47:46 EDT 2014


Ok, so I take it back.  There is still a keyboard focus issue if you click in the browser and then try and type back in an entry field.  The rest does seem to work.

__________________________________
David McKeone
Arts Management Systems Ltd.
mailto:david at artsman.com
http://www.artsman.com
Phone: (403) 536-1203 Fax: (403) 536-1210




On Aug 26, 2014, at 8:59 AM, David McKeone <david at artsman.com> wrote:

> HI Everyone,
> 
> Just wanted to let you know that the link has been updated with some new code (http://www2.artsman.com/omnis/Omnis-weblib-mac.zip)  The only outstanding issue is the keyboard focus issue, which I’ve now just noticed only fails in my VM on OS X 10.6 (works in 10.9).  Awesome! (Haha) 
> 
> This means that the external more-or-less works on both platforms.  The next step will be to combine it back into a single code base and then it’s just about refinements from there.  The biggest “refinement” will probably be some kind of future conversion over to Chromium Embedded Framework (CEF).  The Awesomium project works well, but it seems to be almost dead in terms of support.  It also costs $2900 if your company has above $100,00 USD in revenues and you want to deploy it (something that can’t be said of CEF).  But, as they say, a bird in the hand is worth two in the bush, so for those that don’t mind the expense, this is usable now.  
> 
> If/when the CEF port gets started, it will be a fork of this code base, so I suspect feature parity can be maintained between both.
> 
> For those interested in doing externals, this also happens to be a great example of how to draw Cocoa interface (NSView) into a Carbon/Quartz-based (HIView, GrafPtr) Omnis external.  (See WebBrowser.mm in setupWebView) 
> 
> Good luck everyone, and happy HTML5, Javascript, and CSSing!
> 
> Pull requests will happily be accepted once I get the project up and running on Github.
> 
> __________________________________
> David McKeone
> Arts Management Systems Ltd.
> mailto:david at artsman.com
> http://www.artsman.com
> Phone: (403) 536-1203 Fax: (403) 536-1210
> 
> 
> 
> 
> On Aug 15, 2014, at 5:31 PM, David McKeone <david at artsman.com> wrote:
> 
>> Hi Everyone,
>> 
>> The Mac project continues to move forward, although it is slow going.  Unfortunately, I’ll be out of the office this upcoming week, so this is where it’ll have to stay for a bit (unless others want to take a crack at fixing some of the outstanding bugs).  If you do start working on it and make any progress, or have some questions, then please feel free to email me. I will check email once a day or so.
>> 
>> Here is the updated package: http://www2.artsman.com/omnis/Omnis-weblib-mac.zip  (Same instructions as below, and a release version is bundled under deploy/Mac)
>> 
>> My goal with this zip package is to get the basic of a working Mac implementation going, and then to clean it up (by moving things into platform specific files) and then merge it all with the Windows project.  Here are the current outstanding bugs that prevent me from considering this to be working:
>> 
>> - Keyboard focus get stuck in the browser window if you click into it
>> - If you click the title bar the browser window will come to the front of the Z-Order, but if you click on the window itself, then it will not.
>> - If there are two browser windows open and you click on one of them then it can crash.
>> 
>> So not far off, but I think they are tough things to fix.
>> 
>> To get the title bar “bring to front” working, I had to always use the Cocoa NSWindow pointers with [omnisWindow orderFront:nil];  Using the Carbon pointers with BringToFront(wndRef) didn’t work.  So I’m pretty sure that means that the ordering for the window has been taken over by the Cocoa side of things.  That’s something to keep in mind if you’d like to work on it further.
>> 
>> __________________________________
>> David McKeone
>> Arts Management Systems Ltd.
>> mailto:david at artsman.com
>> http://www.artsman.com
>> Phone: (403) 536-1203 Fax: (403) 536-1210
>> 
>> 
>> 
>> 
>> On Aug 15, 2014, at 2:55 AM, Brian Steerwood <B.Steerwood at wigasoft.ch> wrote:
>> 
>>> Hi
>>> 
>>> David:
>>> Thank you for the hint. I'll check it out and I share your interest in a good Omnis API interface. And it's good news that you got first results on the Mac side.
>>> 
>>> Florian:
>>> Thank you for giving me more detailed information about the external and what possible barriers may be. This helps for my general understanding on how it works and may arouse interest for other developers.
>>> 
>>> Brian S.
>>> 
>>> 
>>> -----Ursprüngliche Nachricht-----
>>> Von: omnisdev-en-bounces at lists.omnis-dev.com [mailto:omnisdev-en-bounces at lists.omnis-dev.com] Im Auftrag von DATAX AG, Florian Binder
>>> Gesendet: Donnerstag, 14. August 2014 10:19
>>> An: OmnisDev List - English
>>> Betreff: AW: Omnis Weblib for Studio 5 -- Work in Progress
>>> 
>>> Hi David,
>>> 
>>> Thanks. I'm to busy at the moment. I'll update the Readme to point to you're repository. 
>>> 
>>> Brian:
>>> Out tests have shown that Awesomium should be up for the task, but It would be necessary to implement a master WebView, which all other WebView are child WebViews. Currently every instance of the component creates it's own process. We haven't figured this one out yet. Additionally there is still a focus issue when the WebView has the focus and the cursor in Omnis is still set on an input field. To get the focus back to Omnis a button or something similar has to pressed.
>>> 
>>> For a more general communications between Omnis and Js some new events (e.g. evCompInit, evCompAction) would need to be implemented into the external. The component itself could be packed and shipped with Awesomiums pak utility (http://wiki.awesomium.com/general-use/using-data-sources.html). That's how we implemented and deploy pdf.js (https://mozilla.github.io/pdf.js/) in our application.
>>> 
>>> Mit freundlichen Gruessen
>>> DATAX AG Unternehmensberatung
>>> 
>>> 
>>> i.A.
>>> Florian Binder
>>> _____________________________
>>> DATAX AG Unternehmensberatung
>>> Aixheimer Strasse 12
>>> 70619 Stuttgart
>>> Deutschland
>>> Fon: +49 711 47667-0
>>> Fax: +49 711 47667-29
>>> fb at datax-ag.de
>>> www.datax-ag.de
>>> _________________________________________________
>>> Vorstand: Christian Hirzel (Vorstandsvorsitzender), Jakob Hirzel Vorsitzender des Aufsichtsrats: Herbert Graef Amtsgericht Stuttgart HRB 13 127
>>> 
>>> 
>>> -----Ursprüngliche Nachricht-----
>>> Von: omnisdev-en-bounces at lists.omnis-dev.com [mailto:omnisdev-en-bounces at lists.omnis-dev.com] Im Auftrag von David McKeone
>>> Gesendet: Donnerstag, 14. August 2014 01:23
>>> An: OmnisDev List - English
>>> Betreff: Re: Omnis Weblib for Studio 5 -- Work in Progress
>>> 
>>> Hi Everyone,
>>> 
>>> I have some positive news on the Mac front.  Thanks to some amazing by Stefan Csomor the external is now drawing pretty well in the window on Mac.  I'd also like to thank Kelly Burgess, Bastiaan Olij, Derek Delpero, and Mitford House for their feedback as well.   There is still work to be done, but we are getting closer.  This component requires the drawing of a Cocoa View within the older Carbon/Quickdraw Omnis windows, so it's been a bit of a battle, but I'm still optimistic.
>>> 
>>> To see the (very hacky) Mac prototype project download it here:  http://www2.artsman.com/omnis/Omnis-weblib-mac.zip
>>> 
>>> If you just want to give it a try without digging into C++ code you must:
>>> 
>>> 1) Extract the zip file to a directory.  E.g. Macintosh HD:omnis-weblib
>>> 2) Open "deploy" folder.  Macintosh HD:omnis-weblib:deploy:Mac
>>> 3) Copy the weblib.u_xcomp  into your Omnis.app package  E.g. /Applications/Omnis Studio.app/MacOS/Contents/xcomp
>>> 4) Copy Awesomium.framework from "deploy/bin/ext/web/browser/system-mac" to /Library/Frameworks
>>> 5) Set permissions on the framework package:
>>> 
>>> sudo chown -R root:admin /Library/Frameworks/Awesomium.framework
>>> 
>>> 5) Open (but do not move!) the library "demo5.lbs" in the "lbs" folder.  E.g. C:\omnis-weblib\lbs\demo5.lbs
>>> 
>>> 
>>> Florian:
>>> ------------------
>>> 
>>> Thank so much for getting us this far.  I'm happy to take over the project maintenance, if everyone is ok with that.  My fork is at https://github.com/dmckeone/omnis-weblib and all the changes I'm making will end up there.
>>> 
>>> Brian:
>>> ----------------
>>> 
>>> I believe Awesomium allows pretty close interaction with Javascript (I know that the underlying Chromium allows a lot of options).  If Awesomium allows it (http://wiki.awesomium.com/), then it should be fairly easy to wire it up into Omnis.
>>> 
>>> On the component store front, I think it would be great if other Omnis developers created sub-windows that could wrap this external to give a nice Omnis API interface to underlying JS components.  It could really open things up to new types of interactions without losing the power of Omnis.
>>> 
>>> __________________________________
>>> David McKeone
>>> Arts Management Systems Ltd.
>>> mailto:david at artsman.com
>>> http://www.artsman.com
>>> Phone: (403) 536-1203 Fax: (403) 536-1210
>>> 
>>> 
>>> 
>>> 
>>> On Aug 13, 2014, at 6:04 AM, Brian Steerwood <B.Steerwood at wigasoft.ch> wrote:
>>> 
>>>> Hi Florian and David
>>>> 
>>>> Florian, a big thanks from me too. What you have created is really a 
>>>> huge step forward in the right direction. This opens up possibilities 
>>>> beyond our current imagination. Just a thought, now we reduce the 
>>>> component store to just this plugin... :-)
>>>> 
>>>> And thank you David for your personal commitment and work on this project and making it Studio 5+ compatible and maybe even cross-platform.
>>>> 
>>>> I have one question regarding the communication between Omnis und JS. Are there more events than evCloseModule and evShowMsg? Or to be more precise, is there a more generic way to communicate with Omnis and/or is it possible to extend this interface without changing internal methods inside the external?
>>>> 
>>>> Thank you
>>>> 
>>>> Brian Steerwood
>>>> 
>>>> 
>>>> -----Ursprüngliche Nachricht-----
>>>> Von: omnisdev-en-bounces at lists.omnis-dev.com 
>>>> [mailto:omnisdev-en-bounces at lists.omnis-dev.com] Im Auftrag von DATAX 
>>>> AG, Florian Binder
>>>> Gesendet: Dienstag, 12. August 2014 10:45
>>>> An: OmnisDev List - English
>>>> Betreff: AW: Omnis Weblib for Studio 5 -- Work in Progress
>>>> 
>>>> Dear List,
>>>> 
>>>> thank you all for the kind words. I hope you all enjoy these new possibilities.
>>>> 
>>>> We are currently not planning to continue developing the open source version of this component, since the version we released is a fork of our component we use in our application. 
>>>> 
>>>> In the future it might be possible the we release another version or contribute to a fork if we achieve something worth motioning.
>>>> 
>>>> Mit freundlichen Gruessen
>>>> DATAX AG Unternehmensberatung
>>>> 
>>>> 
>>>> i.A.
>>>> Florian Binder
>>>> _____________________________
>>>> DATAX AG Unternehmensberatung
>>>> Aixheimer Strasse 12
>>>> 70619 Stuttgart
>>>> Deutschland
>>>> Fon: +49 711 47667-0
>>>> Fax: +49 711 47667-29
>>>> fb at datax-ag.de
>>>> www.datax-ag.de
>>>> _________________________________________________
>>>> Vorstand: Christian Hirzel (Vorstandsvorsitzender), Jakob Hirzel 
>>>> Vorsitzender des Aufsichtsrats: Herbert Graef Amtsgericht Stuttgart 
>>>> HRB 13 127
>>>> 
>>>> 
>>>> -----Ursprüngliche Nachricht-----
>>>> Von: omnisdev-en-bounces at lists.omnis-dev.com 
>>>> [mailto:omnisdev-en-bounces at lists.omnis-dev.com] Im Auftrag von David 
>>>> McKeone
>>>> Gesendet: Montag, 11. August 2014 19:06
>>>> An: OmnisDev List - English
>>>> Betreff: Omnis Weblib for Studio 5 -- Work in Progress
>>>> 
>>>> Hi Everyone,
>>>> 
>>>> Big thanks again to Florian Binder and DataX for getting the ball rolling on the modern HTML5-compliant browser component.  
>>>> 
>>>> I'm extremely excited about this, and I know that others must be as well, so I thought I'd do my work to convert over to Studio 5 out in the open, and post regular Work in Progress (WIP) builds to our website so that everyone can follow along.  I will definitely submit all of these changes back to the main project, but I'm not ready to do that just yet, since the main project will need to be both Studio 4 and 5 out of the box -- and some of my changes to the project have broken Studio 4 compatibility.
>>>> 
>>>> If you aren't excited about this, then take a look at some of these HTML5/JS graphing libraries and imagine that they could be in your apps:
>>>> 
>>>> - http://raphaeljs.com/
>>>> - http://nvd3.org/
>>>> 
>>>> It also supports WebGL (http://media.tojicode.com/q3bsp), video (e.g. YouTube), and all the usual HTML5 goodies (http://html5rocks.com).  Of course to use a lot of this stuff you'll have to become more familiar with HTML, CSS, and Javascript, but that's just how it goes these days ("Any application that can be written in Javascript, will eventually be written in Javascript": http://blog.codinghorror.com/the-principle-of-least-power.
>>>> 
>>>> 
>>>> If there are any questions, it's a probably good idea to keep things open and ask them on this list so that everyone can benefit.
>>>> 
>>>> Link: 
>>>> http://www2.artsman.com/omnis/OmnisWeblib5-20140811-WIP-Windows.zip  
>>>> (Binary xcomps for Studio 5+ on Windows)
>>>> 
>>>> NOTE: awesomium.dll and some other dlls and files in the directory come from the Awesomium project (http://www.awesomium.com/), and were placed in their appropriate directories based on instructions from https://github.com/fb-datax/omnis-weblib.  I'm putting them here for your convenience (and I hope it all works without the installer), but in the long run you will probably also want to download the installer for Awesomium and check the distribution requirements and costs.  This preview shouldn't be misconstrued as a distribution of any kind from Artsman, it's merely an early alpha look at the work I'm doing personally, and I'm using the Artsman server to host some of my open source work because the file is too big too email directly.
>>>> 
>>>> 
>>>> Differences between this project directory and Florian's github version:
>>>> 
>>>> - Addition of "isunicode", "UNICODE", and "_UNICODE" pre-processor 
>>>> flags for building Studio 5+
>>>> - Added /Zc:wchar_t- build setting (Treat wchar_t as built-in type: No 
>>>> -- Studio 5 externals always need this AFAIK)
>>>> - Added /Zc:forScope- build setting (Force Conformance In For Loop 
>>>> Scope: No -- Studio 5 externals always need this AFAIK)
>>>> - Copied some functions from my OmnisTools helpers 
>>>> (https://github.com/dmckeone/NVObjTemplate) to assist with string 
>>>> handling
>>>> - Consolidation of some string handling to make it easier to have a single non-unicode/unicode code base.
>>>> - Change "logToTrace" to use regular C-strings instead of the Omnis 
>>>> str255 type, and convert C-Strings to str255 only when calling 
>>>> ECOaddTraceLine (easier Studio 4/5+ compatibility)
>>>> - Add 'object->shutDownWebView()' on line 475 of weblib.cpp to prevent a crash when closing the browser window on Studio 5.
>>>> 
>>>> - (Personal Preference) Change 'Output Directory' for Debug builds to: C:\TigerLogic\OS523\xcomp  (which is where my current Omnis Studio 5 copy is installed) -- Allows me to just push the "Play" button in Visual Studio to start debugging.  If you are going to do your own builds, you'll likely need to change this setting.
>>>> 
>>>> 
>>>> 
>>>> If you want to install this on your own machine and test it in Omnis Studio 5+ (even if you don't have Visual Studio), I've included binary xcomps in the package.  To install the xcomps:
>>>> 
>>>> 1) Download the project zip file: 
>>>> http://www2.artsman.com/omnis/OmnisWeblib5-20140811-WIP-Windows.zip
>>>> 2) Extract the zip file toa  directory.  E.g. C:\omnis-weblib
>>>> 3) Open "deploy" folder.  E.g. C:\omnis-weblib\deploy
>>>> 4) Install DLLs in your Omnis directory
>>>> a) Copy "awesomium.dll" from "next_to_omnis_exe" folder to be next to "omnis.exe" in the top-level Omnis Studio directory
>>>> b) Copy "weblib.dll" from "to_xcomp" folder to be in the Omnis 
>>>> Studio "xcomp" folder (one level deep from the top-level Omnis Studio 
>>>> directory)
>>>> 5) Open (but do not move!) the library "demo5.lbs" in the "lbs" 
>>>> folder.  E.g. C:\omnis-weblib\lbs\demo5.lbs
>>>> 
>>>> If you want to move the library to a different directory (or use the external in your own application) then you also need to move  the 'deploy' directory, and you need to change the code in Startup_Task.$construct to point to the new location.
>>>> 
>>>> 
>>>> Good luck!
>>>> 
>>>> -David McKeone
>>>> 
>>>> 
>>>> 
>>>> _____________________________________________________________
>>>> Manage your list subscriptions at http://lists.omnis-dev.com
>>>> 
>>>> _____________________________________________________________
>>>> Manage your list subscriptions at http://lists.omnis-dev.com 
>>>> _____________________________________________________________
>>>> Manage your list subscriptions at http://lists.omnis-dev.com
>>> 
>>> _____________________________________________________________
>>> Manage your list subscriptions at http://lists.omnis-dev.com
>>> 
>>> _____________________________________________________________
>>> Manage your list subscriptions at http://lists.omnis-dev.com
>>> _____________________________________________________________
>>> Manage your list subscriptions at http://lists.omnis-dev.com
>> 
>> _____________________________________________________________
>> Manage your list subscriptions at http://lists.omnis-dev.com
> 
> _____________________________________________________________
> Manage your list subscriptions at http://lists.omnis-dev.com




More information about the omnisdev-en mailing list