I have a widget that I worked on while developing CpGears. It laid dormant for a while and lately I finished working on it. The widget is called the Playbar Lock Widget and as its name indicates, it locks the playbar from going forward. So, a learner will not be able to use the next page button or the progress bar to advance in the lesson. However, the entire functionality will return once the presentation reaches the last page.
The widget also tracks the last page visited by the user and if the user goes backward, the next page button will reappear until the user goes back to the last visited page. The nice part is that the widget functionality works also with a LMS. The widget will use the status of the lesson stored in the LMS to enable or disable the next page button and the progress bar.
You can find more information here or experiment with the demo.
It seems that CpGears users have the wrong impression that CpGears doesn’t handle native Captivate events such as CPSlideEnterEvent and CPMovieStartEvent. Actually, CpGears offers a way for monitoring all native Captivate events and I decided to create a small article on the CpGears site to demonstrate how. I have also included a sample project that monitors the changing of slides as well as when the presentation is playing or paused.
Since all widgets containing code that monitors such events need to be compiled, I took the liberty of compiling all native Captivate events in a single captivate.swc file. This way, you can add it to your FlashDevelop project and not worry about where the event classes are located on you PC. You can find the SWC file in the downloads section of the CpGears site or just by clicking here.
By the way, I would like to hear from those that tried CpGears and have them give me their impressions …
At the last Adobe Learning Summit, I attended Josh Cavalier’s presentation on Captivate for mobile. It was a very good and entertaining presentation. Josh presented examples of Captivate courses built for his mobile. It was clear that the standard playbar and controls were not meant for the mobile world and Josh said quite a few times that you would need to build a widget for doing this or that. At some point, the subject of gesture recognition was brought forth and many wished that Captivate would include this in a future release. Well, that was enough to trigger my interest and I looked around to find a free/open source gesture API. Of course the Flash Player 10.1 has some but I wanted to find something quick and easy. I found such an API from ByteArray.org. It’s a very easy and nice API, just enough for experimenting.
So, I used this API to create a widget that would recognize the standard gestures to switch page. It’s not bullet proof but here’s my first draft at it. You can change the page by dragging your mouse/finger to the left or to the right.
I just finished giving my widget presentation at the Adobe Learning Summit 2011. I said that I would make my presentation available on my site so here it is: Adobe Captivate Widget 101.
No one can be indifferent to what’s currently happening in Japan. In those hard times, a small gesture can make a difference. So, I decided to give some money to the Canadian Red Cross relieve fund for Japan. On top of my personal contribution, I decided to give this week’s proceeds from my widget sales to the fund as well. Widget sales are not something that is constant. Some weeks you get some sales and some weeks you don’t get any. However, this week has started really well in term of sales and it will be a pleasure to give it all to the fund. However, why stop there? Let’s do it for next week as well!
Therefore, if you had any intention to buy a widget from Flash-Factor, please do it this week or next week so that the money can go to a very good cause. I’ll go even a step further, if you want to give some money to any Japan Relief fund in the next two weeks, just send me a proof of your contribution and I will give you the widgets that you want up to the level of your contribution. If you give $50 or more, I will give you all three widgets (Interactive Label, Image Zoom and CpNotepad).
So, please be generous between March 13th and March 26th!
As I’m sitting down at the airport waiting to board my flight for my vacation (in the middle of a snow storm), I’m looking at the tweets and blogs about Captivate. Lieve (aka Lilybiri) just wrote a post about her frustration with the lack of control over scoring slides. Lieve is definitely one of the most active contributor in the Captivate community and she’s an expert at Advanced Actions. You would think that where Advanced Actions are not enough, a widget will do the trick. Well, it’s not always the case.
So, I will add my voice to Lieve’s and share my little frustration as well. I really like Captivate and I think it’s a great tool. However, there are times where I have to resort to weird hacks to get things working, just like Lieve has to. I’m sure that, like any tool, the Captivate widget API will evolve and get much better over the next few years but it sure would be nice to have Captivate offer more control over the runtime presentation sooner than later. And also more control over the Quiz API. Right now, you have to resort to using the external Javascript API to communicate with the LMS. Wouldn’t it be nice if we could do that directly from our Widget API? What about being able to offer partial scoring for our Widgets?
I’m sure that the Captivate gods will hear our prayers and bring us some surprises for the upcoming Cp6
In the mean time, if you are interested to learn some tips and trick about widgets, just make you way to the Adobe Learning Summit 2011. I will be presenting what I know about widgets.
Just wrote a new article on another very powerful feature of CpGears: the eventing mechanism. In CpGears, you can know when a widget has changed its visibility. Even more powerful is to know when a Captivate Variable has changed its value. Check it out on google code!
And if you attend my presentation on widgets at the ALS 2011, just make sure to let me know if you like CpGears or not!
Well, I guess it has been long enough since I last promised I would release CpGears. In fact, CpGears has always been available on Google Code but it never had any documentation showing how to use it. Today, I spent a big portion of my day writing articles on how to use CpGears.
Finally, for the brave ones, I also published the CpGears API.
CpGears is in essence functional but keep in mind that it’s still under development and that it may have a few bugs here and there. I have tried it on many widgets I built in the last few months and I think that the workflow is solid.
If you have questions or suggestions, please make sure to post them here or on the Google Site. That will be the only way the API will progress and be useful to more and more developers.
Have you ever tried to get a course completion status from inside Captivate because you wanted your widget to behave differently depending on if the course was completed or not? Some people are accessing the SCORM API from javascript to achieve that but there’s also a way to get it directly from within Captivate. It’s really simple. The Main Captivate movie (CaptivateMainTimeline) has a public variable called “quizPlaybackController“. This gives you in turn access to a property called “totalQuizCompleted“. This property will either be set to “completed” or “incomplete“. So, if you want to know the status of the course, just read this last property.
In CpGears, just type the following lines of code to get the course status:
import cpgears.helpers.DisplayObjectUtil;
var mainTimeline:MovieClip = DisplayObjectUtil.findParentByType(this,"CaptivateMainTimeline")as MovieClip; var playbackController:Object = mainTimeline.quizPlaybackController;
if(playbackController !=null&& playbackController.totalQuizCompleted =="completed"){
TYPE IN YOUR CODE HERE }
If you are not using CpGears, the CaptivateMainTimeline movieclip can usually be found by typing “this.root.parent.root”
If you want to see more tips and tricks, then just make sure you attend my session at the Adobe Learning Summit … I’ll be speaking there and presenting a lot of tips and tricks about widget!
Not too long ago, I had to test one widget’s behavior when launched from an LMS. I did not had easy access to a LMS so I decided to use the old ADL Test Suite. For those who do not know, ADL stands for Advanced Distributed Learning and they are the driving force behind SCORM.
I have a new laptop so the test suite is not installed on it yet. Furthermore, I remembered that the installation was a bit tricky the last time I did it. So, before I started, I decided to browse the web a little bit to see if I could not find another tool that would do the same job. I stumbled across SCORM Cloud. I remember someone tweeting about it but I never really paid attention at the time. Turns out that SCORM Cloud offers a free trial account that is perfectly suited for a developer to test its SCORM packages. Their test track also comes with very cool features: you can reset the SCO progress and there are very detailed logs about all the values transfered back and forth through getValue() and setValue(). It’s really a must see and a must have tool set for widget developers. The team behind it also seems really dedicated to building SCORM tools. So don’t waist another moment testing your SCORM content in your LMS, first give it a try in SCORM Cloud!