import mx.modules.IModuleInfo;
import mx.modules.ModuleManager;
private function toggleStyles():void {
var moduleInfo:IModuleInfo = ModuleManager.getModule('styles.swf');
if (moduleInfo.loaded) {
StyleManager.unloadStyleDeclarations('styles.swf');
} else {
StyleManager.loadStyleDeclarations('styles.swf');
}
}
]]>
</mx:Script>
<navigation:ControlBar/>
</mx:Application>
The sample application presented in Example 7-3 allows you to load and unload the
compiled stylesheet styles.swf when the user clicks anywhere in the application area.
Figure 7-1 illustrates the striking difference before and after the styles were loaded.
When developing a portal, you can apply similar styling techniques. If every portlet is
styled dynamically, making them conform to the required look and feel is simply a
matter of adjusting and recompiling the relevant CSS files. Perhaps the portal owner
may even rebuild the CSS module without bothering the creator of the portlet. The
portlet itself will not have to be rebuilt to change its appearance.
Example 7-4 represents the top level control bar of a sample portal desktop.
Example 7-4. ControlBar of a sample portal
<?xml version="1.0" encoding="utf-8"?>
<!-- com.farata.portal.navigation.ControlBar.mxml -->
<mx:HBox xmlns:mx="http://www.adobe.com/2006/mxml"
width="100%" height="28"    verticalAlign="middle"
styleName="controlBarPanelStyle">
<mx:HBox verticalAlign="middle" horizontalGap="10" paddingLeft="10">
<mx:Button id="saveButton" height="16" width="16"
styleName="saveButtonStyle" toolTip="Save Portal"
useHandCursor="true" buttonMode="true"/>
<mx:Button id="showTopPanelButton" height="16" width="16"
styleName="hidePanels" toolTip="Hide/Show Top Panel"
useHandCursor="true" buttonMode="true"/>
<mx:Button id="showPanelButton"   height="16" width="16"
styleName="showPanelButtonDown" toolTip="Show Panel"
useHandCursor="true" buttonMode="true"/>
</mx:HBox>
<mx:HBox width="100%" horizontalAlign="right" paddingRight="5">
<mx:HBox borderStyle="solid" cornerRadius="13"
borderThickness="0" horizontalGap="0" >
<mx:Button styleName="arrowRight"
useHandCursor="true" buttonMode="true" />
<mx:Button styleName="arrowLeft"
useHandCursor="true" buttonMode="true" />
<mx:filters>
Runtime Style Modules | 331
Pdf file thumbnail preview - Draw thumbnail images for PDF in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Support Thumbnail Generation with Various Options for Quick PDF Navigation
enable thumbnail preview for pdf files; how to make a thumbnail from pdf
Pdf file thumbnail preview - VB.NET PDF Thumbnail Create SDK: Draw thumbnail images for PDF in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
Support Thumbnail Generation with Various Options for Quick PDF Navigation
generate pdf thumbnails; pdf thumbnail viewer
<mx:BevelFilter />
<mx:GlowFilter color="#d3dffd"/>
</mx:filters>
</mx:HBox>
<mx:Button
styleName="tileStyle" toolTip="Arrange Windows"
useHandCursor="true" buttonMode="true" />
<mx:Button styleName="minimizeStyle" toolTip="Minimize All "
useHandCursor="true" buttonMode="true" />
<mx:Button styleName="restoreStyle" toolTip="Restore All
useHandCursor="true" buttonMode="true" />
</mx:HBox>
</mx:HBox>
Figure 7-1. RuntimeStyleDemo with styles.swf loaded (top) and unloaded (bottom)
332 | Chapter 7: Modules, Libraries, Applications, and Portals
How to C#: Preview Document Content Using XDoc.Word
RasterEdge XDoc.Word provide you with APIs to get a thumbnail bitmap of the first page in the word document file. You can be able to get a preview of this word
no pdf thumbnails in; pdf thumbnail generator online
How to C#: Preview Document Content Using XDoc.PowerPoint
XDoc.PowerPoint provide you with APIs to get a thumbnail bitmap of the first page in the PowerPoint document file. You can be able to get a preview of this
show pdf thumbnails; generate pdf thumbnail c#
Now you are ready to investigate the most obvious part of the modularization API.
Real Actors: Loader and URLLoader
So far this chapter has touched briefly on the 
Image
StyleManager
, and 
ModuleManager
classes, and equally briefly used 
ModuleManager
. To further your understanding of the
modularization techniques, you need to be aware of two important connections:
• The 
Image
class is a descendant of 
SWFLoader
, the Flex component that facilitates
loading of SWF files in addition to images, such as JPEG and GIF.
• Both 
SWFLoader
and 
ModuleManager
delegate the actual loading to 
flash.dis
play.Loader
.
As  the  saying goes,  all roads lead  to  Rome,  and  for  your  purposes  Rome  is
flash.display.Loader
. Be it 
SWFLoader
ModuleManager
StyleManager
(or the similar
ResourceManager
), modularization is all about loading and unloading classes via
flash.display.Loader
, the only Flash component that creates class definitions and class
instances from the remote URL. In addition, 
flash.display.Loader
can create classes
from the existing byte code, for instance, the byte cide obtained with the help of
flash.net.URLLoader
(as illustrated in Example 7-1).
Loading Modules with Module Loader
The simplest way you can modularize your application is by using Flex modules. The
class 
Module
is a 
VBox
that, like 
Application
, is a 
Container
that also gets compiled, along
with the dependent classes, to a separate .swf file. Example 7-5 illustrates a trivial
module.
Example 7-5. Example of the module
<?xml version="1.0"?>
<!-SimpleModule.xml -->
<mx:Module xmlns:mx=http://www.adobe.com/2006/mxml layout="vertical">
<mx:Text text="This is the simplest module" >
</mx:Module>
Any functional part of your application UI that can be developed and tested independ-
ently is a good candidate to become a module. The advantages are obvious: you can
delegate the development and testing efforts to a different team or allocate a different
time slot to it. Modularization will also improve memory utilization, because you can
unload the module when the application does not need it anymore.
For Flash Builder to compile your module, it needs to be included into the .action-
ScriptProperties file of your project. You typically add the module via the project’s
properties, as shown in Figure 7-2 or by using the New Module wizard.
Loading Modules with Module Loader | 333
How to C#: Set Image Thumbnail in C#.NET
PDF to text, C#.NET convert PDF to images, C#.NET PDF file & pages VB.NET How-to, VB.NET PDF, VB.NET Word, VB.NET Excel How to C#: Set Image Thumbnail in C#.NET.
enable thumbnail preview for pdf files; create thumbnail jpg from pdf
How to C#: Preview Document Content Using XDoc.excel
RasterEdge XDoc.Excel provide you with APIs to get a thumbnail bitmap of the first page in the Excel document file. You can be able to get a preview of this
create thumbnail from pdf; pdf thumbnails in
The easiest way to load a module to your application during runtime is via 
Module
Loader
, a descendant of the 
VBox
that has an extra API to load and unload module SWF
files, as shown in Example 7-6.
Example 7-6. Loading a module via ModuleLoader
<?xml version="1.0"?>
<!-- ModuleLoaderDemo.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:HBox>
<mx:Button label="Load Module"
click="moduleLoader.loadModule('SimpleModule.swf')" />      <mx:Button 
label="Unload Module"
click="moduleLoader.unloadModule()"
enabled="{moduleLoader.loaderInfo.bytesTotal!=0}"/>
</mx:HBox>
<mx:ModuleLoader id="moduleLoader"/>
</mx:Application>
As you could figure by now, the ultimate performer of the class loading in the case of
the 
ModuleLoader
is,  again, 
flash.display.Loader
 Being  clear  on  the  role  of
flash.display.Loader
will help you understand other concepts in this chapter.
Preloading Modules with ModuleManager
In  addition  to 
ModuleLoader
 which  is  a  high-level  module  API,  Flex  offers
ModuleManager
. The prime benefit of using 
ModuleManager
is that you can separate the
transfer of the module byte code over the network, which is potentially a lengthy
Figure 7-2. Registration of the module to be compiled by Flash Builder
334 | Chapter 7: Modules, Libraries, Applications, and Portals
How to C#: Generate Thumbnail for Word
Images. Convert Word to ODT. Convert PDF to Word. a Word File. File: Merge Word Files. File: Split Word Text Search. Insert Image. Thumbnail Create. Thumbnail Create
create pdf thumbnails; pdf thumbnail
How to C#: Generate Thumbnail for PowerPoint
Document. Conversion. Convert PowerPoint to PDF. Convert PowerPoint File: Merge PowerPoint Files. File: Split PowerPoint Text Search. Insert Image. Thumbnail Create
pdf files thumbnail preview; pdf no thumbnail
operation, from the actual creation of the module instance(s). Certainly, you could do
it yourself with the 
URLLoader
(as illustrated in Example 7-1), but you should take ad-
vantage of the nice abstraction layer provided by the 
ModuleManager
class. In particular,
the contract of the 
ModuleManager
guarantees that you won’t transfer the module bytes
over the network more than once.
To load a module into a singleton registry of modules provided by 
ModuleManager
, you
use a module proxy, such as an implementation of the 
IModuleInfo
interface, corre-
sponding to the module URL. You then perform the 
load()
via this module proxy, as
shown  in  Example  7-7.  The  actual  loading  task  will  be  delegated  to
flash.display.Loader
.
Example 7-7. Module preloading technique
private var moduleInfoRef:Object = {};
private function loadModule(moduleUrl:String):void {
var moduleInfo:IModuleInfo  = ModuleManager.getModule(moduleUrl);
moduleInfo.addEventListener(ModuleEvent.READY, onModuleReady ) ;
//You need to protect moduleInfo from being garbage-collected
moduleInfoRef[moduleUrl] = moduleInfo;
moduleInfo.load();
}
// Module is loaded. You may create modules via event.module.factory
private   function onModuleReady(event:ModuleEvent):void {
// Remove 'protection' from moduleInfo
moduleInfoRef[event.module.url]=null;
}
The code, similar to the function 
loadModule()
, can be called well in advance of the
immediate need of the module. Then, to create an instance of the module, you obtain
another instance of the module proxy and use its 
factory
property, as shown in
Example 7-8.
Example 7-8. Creating an instance of the preloaded module
private function createModuleInstance(moduleUrl:String,
parent:UIComponent=null):Module {
var module:Module;
var moduleInfo:IModuleInfo  = ModuleManager.getModule(moduleUrl);
var flexModuleFactory:IFlexModuleFactory = moduleInfo.factory;
if (flexModuleFactory != null) {
module = flexModuleFactory.create() as Module;
if (parent) {
parent.addChild(module);
}
}
return module;
}
Preloading Modules with ModuleManager | 335
C# Image: View & Operate Web Page Using .NET Doc Image Web Viewer
Support multiple document and image formats, like PDF and TIFF; the page order of source document file using mouse dragging in thumbnail preview section;
thumbnail pdf preview; create thumbnail from pdf c#
How to C#: Overview of Using XDoc.PowerPoint
See this C# guide to learn how to use RasterEdge PowerPoint SDK for .NET to perform quick file navigation. You may easily generate thumbnail image from
enable pdf thumbnails in; pdf thumbnail preview
If this code looks confusing and leaves you wondering what to think of 
IFlexModule
Factory
and where 
create()
comes from, try this: from the Flash Builder project’s
Properties, navigate to Flex Compiler, and in the pop-up window add the compiler
option 
-keep
in the field Additional Compiler Arguments to see the generated Action-
Script  code.  Then,  in  the  src/generated  folder,  open  the  file  _SimpleMod-
ule_mx_core_FlexModuleFactory.as. The Flex compiler adds an implementation of
IFlexModuleFactory
for each module, similar to the one shown in the Example 7-9.
Example 7-9. Compiler-generated descendant of FlexModuleFactory
package{
public class _SimpleModule_mx_core_FlexModuleFactory
extends mx.core.FlexModuleFactory
implements IFlexModuleFactory{
 .  .
override public function create(... params):Object{
if (params.length > 0 && !(params[0] is String))
return super.create.apply(this, params);
var mainClassName:String = params.length == 0 ? "SimpleModule" :
String(params[0]);
var mainClass:Class = Class(getDefinitionByName(mainClassName));
if (!mainClass) return null;
var instance:Object = new mainClass();
if (instance is IFlexModule)
(IFlexModule(instance)).moduleFactory = this;
return instance;
}
override    public function info():Object {
return {
compiledLocales: [ "en_US" ],
compiledResourceBundleNames: [ "containers", "core", "effects",
"skins", "styles" ],
creationComplete: "onCreationComplete()",
currentDomain: ApplicationDomain.currentDomain,
mainClassName: "SimpleModule",
mixins: [ "_SimpleModule_FlexInit",
"_richTextEditorTextAreaStyleStyle", "_ControlBarStyle",
 .  .
"_SimpleModuleWatcherSetupUtil" ]
}
}
}
}
Finally, to enable the unloading of the module, you need to detach all module instances
from their parents. To that end, the example application maintains a 
Dictionary
of
loaded modules instances, one per module URL:
[Bindable]private var modules:Dictionary = new Dictionary();
336 | Chapter 7: Modules, Libraries, Applications, and Portals
How to C#: Overview of Using XDoc.Excel
See this C# guide to learn how to use RasterEdge Excel SDK for .NET to perform quick file navigation. You may easily generate thumbnail image from Excel.
create thumbnails from pdf files; how to view pdf thumbnails in
How to C#: Overview of Using XDoc.Word
C# users how to: create a new Word file and load Word from pdf; merge, append can be drawn and added to a specific location on Word file page. Create Thumbnail.
create pdf thumbnail; print pdf thumbnails
Although this example deals with only one module (SimpleModule.swf), you may up-
grade this code to a reusable utility. Then the unloading of the module can be coded
like in Example 7-10.
Example 7-10. Module unloading technique
private function unloadModule(moduleUrl:String):void {
var moduleInfo:IModuleInfo  = ModuleManager.getModule(moduleUrl);
if (moduleInfo.loaded) {
var moduleList:Array = modules[moduleUrl];
for  each(var module:Module in  moduleList) {
module.parent.removeChild(module);
}
delete modules[moduleUrl];
moduleInfo.unload();
moduleInfo.release();
}
isModuleLoaded = false;
}
Figure 7-3 illustrates the example application after  creation of  one  instance  of
SimpleModule. Example 7-11 lists the complete code of the ModuleManagerDemo
application.
Figure 7-3. ModuleManagerDemo with one instance of the module
Example 7-11. Complete code of ModuleManagerDemo
<?xml version="1.0" encoding="utf-8"?>
<!-- ModuleManagerDemo.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Script>
<![CDATA[
import mx.core.UIComponent;
import mx.controls.Alert;
Preloading Modules with ModuleManager | 337
import mx.modules.Module;
import mx.core.IFlexModuleFactory;
import mx.modules.IModuleInfo;
import mx.events.ModuleEvent;
import mx.modules.ModuleManager;
private const MODULE_URL:String='SimpleModule.swf';
private var moduleInfoRef:Object = {};
[Bindable]private var modules:Dictionary = new Dictionary();
private function loadModule(moduleUrl:String,
applicationDomain:ApplicationDomain=null):void {
var moduleInfo:IModuleInfo  = ModuleManager.getModule(moduleUrl);
moduleInfo.addEventListener(ModuleEvent.READY, onModuleReady ) ;
moduleInfo.addEventListener(ModuleEvent.ERROR, onModuleError ) ;
moduleInfoRef[moduleUrl] = moduleInfo;
moduleInfo.load(
applicationDomain?
applicationDomain:ApplicationDomain.currentDomain
);
}
private function createModuleInstance(moduleUrl:String,
parent:UIComponent=null):Module {
var module:Module;
var moduleInfo:IModuleInfo  = ModuleManager.getModule(moduleUrl);
var flexModuleFactory:IFlexModuleFactory = moduleInfo.factory;
if (flexModuleFactory != null) {
module = flexModuleFactory.create() as Module;
var moduleList:Array = modules[moduleUrl] ?  modules[moduleUrl] :
new Array();
moduleList.push(module);
modules[moduleUrl] = moduleList;
if (parent) {
parent.addChild(module);
}
}
return module;
}
[Bindable] private var isModuleLoaded:Boolean=false;
private   function onModuleReady(event:ModuleEvent):void {
// Module is loaded. You may create module instances
//  via event.module.factory (moduleInfo)
moduleInfoRef[event.module.url]=null;
isModuleLoaded = true;
}
private function onModuleError (event:ModuleEvent):void {
Alert.show( event.errorText );
}
private function unloadModule(moduleUrl:String):void {
var moduleInfo:IModuleInfo  = ModuleManager.getModule(moduleUrl);
if (moduleInfo.loaded) {
338 | Chapter 7: Modules, Libraries, Applications, and Portals
var moduleList:Array = modules[moduleUrl];
for  each(var module:Module in  moduleList) {
module.parent.removeChild(module);
}
delete modules[moduleUrl];
moduleInfo.unload();
moduleInfo.release();
}
isModuleLoaded = false;
}
]]>
</mx:Script>
<mx:HBox>
<mx:Button label="Load Module" click="loadModule(MODULE_URL)" />
<mx:Button label="Instantiate Module"
click="createModuleInstance(MODULE_URL, this)"
enabled="{isModuleLoaded}"/>
<mx:Button label="Unload Module"
click="unloadModule(MODULE_URL)"
enabled="{isModuleLoaded}"/>
</mx:HBox>
</mx:Application>
Note that Example 7-11 applies the concept of application domains:
moduleInfo.load(
applicationDomain?applicationDomain:ApplicationDomain.currentDomain
);
You’ll learn about domains a bit later in this chapter. For now, suffice it to say that the
code loads module classes into the same area (in memory) where the classes of the
calling applications were loaded.
Whether via 
ModuleLoader
or 
ModuleManager
, you have loaded your module. How will
the application communicate with it?
Communicating with Modules
You’ve designed your modules to be independent, but there should be provisions to
allow external applications to communicate with them, pass them some information
and receive response notifications. From the user’s point of view, it may look like an
innocent drag-and-drop action, but internally you must resort to one of the several
available means of communication. We will start with direct references to the module
variables and methods.
First,  consider  the  method-based  interfaces.  We’ll  assume  that  you  have  the
IGreeting
interface, as shown in Example 7-12.
Communicating with Modules | 339
Example 7-12. IGreeting interface
//IGreeting.as
package
{
public interface IGreeting {
function getGreeting():String;
function setGreeting( value:String ):void;
}
}
Further, suppose that a module, such as 
ModuleWithIGreeting
in Example 7-13, is
implementing this interface. Please notice that calling 
setGreeting()
will modify the
bindable variable 
greeting
that affects the title of the module’s panel.
Example 7-13. Example of a module implementing the IGreeting interface
<?xml version="1.0"?>
<!- ModuleWithIGreeting.mxml -->
<mx:Module xmlns:mx="http://www.adobe.com/2006/mxml" xmlns="*"
implements="IGreeting"
creationComplete="onCreationComplete()"
>
<mx:Script>
<![CDATA[
[Bindable] private var greeting:String="";
public function setGreeting(value:String):void {
greeting = value;
}
public function getGreeting():String {
return greeting;
}
]>
</mx:Script>
<mx:Panel id="panel" title="Module With Greeting{greeting}" width="400"
height="200">
</mx:Panel>
</mx:Module>
How can your application take advantage of the fact that the loaded module imple-
ments a known interface? Assuming that it has used a 
ModuleLoader
, as the following
snippet shows, you can cast its 
child
property to the 
IGreeting
interface:
var greeting:IGreeting = moduleLoader.child as IGreeting;
greeting.setGreeting(" loaded by application");
Then again, no one prevents you from simply referencing the panel from Mod-
uleWithIGreeting by name:
var module:Module = moduleLoader.child as Module;
var panel:Panel = module.getChildByName("panel") as Panel;
trace(panel.title); //Simple Module  loaded by application
340 | Chapter 7: Modules, Libraries, Applications, and Portals
Documents you may be interested
Documents you may be interested