----------------------------------------------------------------------------- PROJECT DAZZLER ----------------------------------------------------------------------------- Table of Contents: 1. Introduction 2. Framework Outline 3. Example Application 4. Software Requirements ----------------------------------------------------------------------------- 1. Introduction Welcome to Project Dazzler! Project Dazzler is a hyper-functional slide show application that allows for a developer to implement it in a myriad of situations. For instance, you may utilize this framework to create a standard slide show presentation; while you will likely not reasonably be able to match the features offered by similar mainstream applications, we believe the framework is here for you to do so if you wish. ----------------------------------------------------------------------------- 2. Framework Outline The meat and potatoes of this project are within the Slideshow, Slide, ContentType, and Animation classes. Slideshow stores all Slide elements in a linkedlist and provides means for navigating through this list. Slide is an abstract class that contains the contents of the slide, which are types that must be enumerated. The default enumerations are: audio, text, images, text color, and the title of each slide. These enumerations can be accessed by calling ContentType, followed by the enumerations (eg. ContentType.AUDIO returns a value corresponding to the enumeration for Audio. These enumerations are used as the keys for accessing the actual elements of each slide. These elements are stored in a map, where the value for each key is a generic LinkedList. If you want text in your slide, store all appropriate strings in a linkedlist and then add this list to the map. The developer must create a Slide object that extends Slide in order to instantiate a slide. If nothing else, this new object MUST override both abstract buildSlide methods. These methods are supposed to take a Composite, which is the parent of a composite you will create to display all slide elements. Within this method, add any juicy bits that you want shown in your presentation to this new composite before returning. The sky is the limit with this method. The buildSlide method with integer arguments is supposed to state where you would like the TOP LEFT corner of the new composite you create to be. These coordinates can also be used to animate the Slide when you build it. To animate a slide, you must also create your own animation, which implements the AnimationInterface. Among other things, this animation must override the two animate methods. Within this animation, manipulate the composite that you must pass to this method in whatever fashion you would like; you do not actually have to support both methods. However, in order to animate the composite, you will not natively have thread access to the composite. You must work around this by invoking asyncExec from the static Display class, which is supported by SWT, and then you can manipulate the composite. An example of this is provided in FlashAnimation, within the example application. Diagrams for this framework are available in src/main/resources/ExampleResources/Diagrams, and may also be accessed from within the sample application. -------------------------------------------------------------------------------- 3. Example Application This application is a simple example of the framework at work. Within the application, the main method for which is located in StoryApp.JAVA, you may press F10 for a list of available commands for this application. If you do this, you must click on the application window again to regain focus before any of these commands will work. These commands can also be found by navigating through the file menus at the top of the application. When the application launches, you should be met with a picture of a cartoon person who has a fork in his stomach. Here is the list of commands that you may use once the application has launched: Up Arrow Key - Play the slide show from the current slide. Down Arrow Key - Stop the audio and remain on the current slide. Right Arrow Key - Proceed to the next slide and play its audio. Left Arrow Key - Regress one slide and play its audio. Then resume playing the show. F10 - Open the help menu. F1 - Show framework diagrams. Repeated press of this key moves to the next diagram. F2 - Move to pervious framework diagram. F1 must have been pressed at least once previously. Please note that this is a simple example of our framework at work, and we honestly believe that it may be utilized in much more complex situations, such as animated story boards for movies and creating memory (matching) games that involve still images. This application also uses Spring. The configuration file for this application is located in src/main/resources/ExampleResources. The contents of every slide have been enumerated within this file, so if you would like to add text or change an image, a simple revision of this file would result in the data being changed exactly how you would like it. To get the slide show object, the context is obtained within the main method of the application via the FileSystemXmlApplicationContext object provided by Spring. You could utilize this object to get any Slide or any slide show within this file, without having to change anything in the program code. ----------------------------------------------------------------------------------------------- 4. Software Requirements This application is dependent on 4 libraries beyond those provided by Dr. Anvik's project build path. These libraries are JLayer1.0.1, org.eclipse.SWTResourceManager, org.Hamcrest, and junit 4.10. The former two have been placed in src/main/resources, and the latter two may be found in src/test/resources, but these two may also potentially be obtained from your default Eclipse libraries and are only required for running the JUnit test suite associated with our framework. JLayer is the jar file that contains the Player object used to play audio in the example application. A link to where you may download JLayer is provided in the comments of our example application, if the provided jar cannot be located for some reason.