PageRenderTime 26ms CodeModel.GetById 14ms RepoModel.GetById 0ms app.codeStats 1ms

/FlexPaper_SDK4/src/com/devaldi/controls/flexpaper/Viewer.as

http://flexpaper.googlecode.com/
ActionScript | 1893 lines | 1480 code | 356 blank | 57 comment | 457 complexity | 2ecc6e35ac2bd5d5f9276482a85dc632 MD5 | raw file

Large files files are truncated, but you can click here to view the full file

  1. /*
  2. Copyright 2009 Erik Engstr??m
  3. This file is part of FlexPaper.
  4. FlexPaper is free software: you can redistribute it and/or modify
  5. it under the terms of the GNU General Public License as published by
  6. the Free Software Foundation, version 3 of the License.
  7. FlexPaper is distributed in the hope that it will be useful,
  8. but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  10. GNU General Public License for more details.
  11. You should have received a copy of the GNU General Public License
  12. along with FlexPaper. If not, see <http://www.gnu.org/licenses/>.
  13. */
  14. package com.devaldi.controls.flexpaper
  15. {
  16. import caurina.transitions.Tweener;
  17. import com.devaldi.controls.FlowBox;
  18. import com.devaldi.controls.FlowVBox;
  19. import com.devaldi.controls.MatrixTransformer;
  20. import com.devaldi.controls.Spinner;
  21. import com.devaldi.controls.ZoomCanvas;
  22. import com.devaldi.controls.flexpaper.resources.MenuIcons;
  23. import com.devaldi.controls.flexpaper.utils.StreamUtil;
  24. import com.devaldi.controls.flexpaper.utils.TextMapUtil;
  25. import com.devaldi.events.CurrentPageChangedEvent;
  26. import com.devaldi.events.CursorModeChangedEvent;
  27. import com.devaldi.events.DocumentLoadedEvent;
  28. import com.devaldi.events.DocumentPrintedEvent;
  29. import com.devaldi.events.ErrorLoadingPageEvent;
  30. import com.devaldi.events.ExternalLinkClickedEvent;
  31. import com.devaldi.events.FitModeChangedEvent;
  32. import com.devaldi.events.PageLoadedEvent;
  33. import com.devaldi.events.PageLoadingEvent;
  34. import com.devaldi.events.ScaleChangedEvent;
  35. import com.devaldi.events.SelectionCreatedEvent;
  36. import com.devaldi.events.SwfLoadedEvent;
  37. import com.devaldi.events.ViewModeChangedEvent;
  38. import com.devaldi.streaming.DupImage;
  39. import com.devaldi.streaming.DupLoader;
  40. import com.devaldi.streaming.IDocumentLoader;
  41. import com.devaldi.streaming.IGenericDocument;
  42. import com.devaldi.streaming.SwfDocument;
  43. import flash.display.AVM1Movie;
  44. import flash.display.Bitmap;
  45. import flash.display.BitmapData;
  46. import flash.display.DisplayObject;
  47. import flash.display.InteractiveObject;
  48. import flash.display.Loader;
  49. import flash.display.MovieClip;
  50. import flash.display.Shape;
  51. import flash.display.SimpleButton;
  52. import flash.display.Sprite;
  53. import flash.events.Event;
  54. import flash.events.IOErrorEvent;
  55. import flash.events.KeyboardEvent;
  56. import flash.events.MouseEvent;
  57. import flash.events.ProgressEvent;
  58. import flash.external.ExternalInterface;
  59. import flash.filters.DropShadowFilter;
  60. import flash.geom.Matrix;
  61. import flash.geom.Point;
  62. import flash.net.URLRequest;
  63. import flash.printing.PrintJob;
  64. import flash.printing.PrintJobOptions;
  65. import flash.system.ApplicationDomain;
  66. import flash.system.LoaderContext;
  67. import flash.system.System;
  68. import flash.text.TextSnapshot;
  69. import flash.ui.Keyboard;
  70. import flash.utils.ByteArray;
  71. import flash.utils.Timer;
  72. import flash.utils.escapeMultiByte;
  73. import flash.utils.setTimeout;
  74. import mx.containers.Box;
  75. import mx.containers.Canvas;
  76. import mx.containers.HBox;
  77. import mx.containers.VBox;
  78. import mx.controls.Alert;
  79. import mx.controls.Image;
  80. import mx.core.Container;
  81. import mx.core.SpriteAsset;
  82. import mx.core.UIComponent;
  83. import mx.events.FlexEvent;
  84. import mx.events.IndexChangedEvent;
  85. import mx.managers.CursorManager;
  86. import mx.resources.ResourceManager;
  87. import mx.rpc.events.FaultEvent;
  88. import mx.rpc.events.ResultEvent;
  89. import mx.rpc.http.HTTPService;
  90. import mx.managers.PopUpManager;
  91. [Event(name="onDocumentLoaded", type="com.devaldi.events.DocumentLoadedEvent")]
  92. [Event(name="onPageLoaded", type="com.devaldi.events.PageLoadedEvent")]
  93. [Event(name="onPageLoading", type="com.devaldi.events.PageLoadingEvent")]
  94. [Event(name="onDocumentLoading", type="flash.events.Event")]
  95. [Event(name="onNoMoreSearchResults", type="flash.events.Event")]
  96. [Event(name="onLoadingProgress", type="flash.events.ProgressEvent")]
  97. [Event(name="onScaleChanged", type="com.devaldi.events.ScaleChangedEvent")]
  98. [Event(name="onExternalLinkClicked", type="com.devaldi.events.ExternalLinkClickedEvent")]
  99. [Event(name="onCurrPageChanged", type="com.devaldi.events.CurrentPageChangedEvent")]
  100. [Event(name="onViewModeChanged", type="com.devaldi.events.ViewModeChangedEvent")]
  101. [Event(name="onFitModeChanged", type="com.devaldi.events.FitModeChangedEvent")]
  102. [Event(name="onCursorModeChanged", type="com.devaldi.events.CursorModeChangedEvent")]
  103. [Event(name="onDocumentLoadedError", type="flash.events.ErrorEvent")]
  104. [Event(name="onLogoClicked", type="flash.events.Event")]
  105. [Event(name="onSelectionCreated", type="com.devaldi.events.SelectionCreatedEvent")]
  106. [Event(name="onDocumentPrinted", type="com.devaldi.events.DocumentPrintedEvent")]
  107. [Event(name="onErrorLoadingPage", type="com.devaldi.events.ErrorLoadingPageEvent")]
  108. public class Viewer extends Canvas
  109. {
  110. private var _swfFile:String = "";
  111. private var _swfFileChanged:Boolean = false;
  112. private var _initialized:Boolean = false;
  113. private var _loaderptr:Loader;
  114. private var _libMC:IGenericDocument;
  115. private var _displayContainer:Container;
  116. private var _paperContainer:ZoomCanvas;
  117. private var _swfContainer:Canvas;
  118. private var _scale:Number = 1;
  119. private var _pscale:Number = 1;
  120. private var _swfLoaded:Boolean = false;
  121. private var _pageList:Array;
  122. private var _viewMode:String = Viewer.InitViewMode;
  123. private var _fitMode:String = FitModeEnum.FITNONE;
  124. public static var InitViewMode:String = ViewModeEnum.PORTRAIT;
  125. private var _scrollToPage:Number = 0;
  126. private var _numPages:Number = 0;
  127. private var _currPage:Number = 0;
  128. private var _tweencount:Number = 0;
  129. private var _bbusyloading:Boolean = true;
  130. private var _zoomtransition:String = "easeOut";
  131. private var _zoomtime:Number = 0.6;
  132. private var _fitPageOnLoad:Boolean = false;
  133. private var _fitWidthOnLoad:Boolean = false;
  134. private var _dupImageClicked:Boolean = false;
  135. private var _docLoader:IDocumentLoader;
  136. private var _progressiveLoading:Boolean = false;
  137. private var _repaintTimer:Timer;
  138. private var _loadTimer:Timer;
  139. private var _frameLoadCount:int = 0;
  140. private var _adjGotoPage:int = 0;
  141. private var _zoomInterval:Number = 0;
  142. private var _inputBytes:ByteArray;
  143. private var _textSelectEnabled:Boolean = false;
  144. private var _cursorsEnabled:Boolean = true;
  145. private var _grabCursorID:Number = 0;
  146. private var _grabbingCursorID:Number = 0;
  147. private var _pluginList:Array;
  148. public static var ViewModeExtList:Array;
  149. private var _currentExtViewMode:IFlexPaperViewModePlugin;
  150. private var _minZoomSize:Number = 0.3;
  151. private var _maxZoomSize:Number = 5;
  152. private var _searchMatchAll:Boolean = false;
  153. private var _searchServiceUrl:String = "";
  154. private var _performSearchOnPageLoad:Boolean = false;
  155. private var _pendingSearchPage:int = -1;
  156. private var _skinImg:Bitmap = new MenuIcons.SMALL_TRANSPARENT();
  157. private var _skinImgc:Bitmap = new MenuIcons.SMALL_TRANSPARENT_COLOR();
  158. private var _skinImgDo:Image;
  159. public function Viewer(){
  160. super();
  161. }
  162. public function get BusyLoading():Boolean {
  163. return _bbusyloading;
  164. }
  165. public function set BusyLoading(b:Boolean):void {
  166. _bbusyloading = b;
  167. }
  168. public function get libMC():IGenericDocument {
  169. return _libMC;
  170. }
  171. public function get IsInitialized():Boolean{
  172. return _initialized;
  173. }
  174. public function get SwfLoaded():Boolean{
  175. return _swfLoaded;
  176. }
  177. public function get DisplayContainer():Container{
  178. return _displayContainer;
  179. }
  180. public function set DisplayContainer(c:Container):void{
  181. _displayContainer = c;
  182. }
  183. public function get PaperContainer():ZoomCanvas{
  184. return _paperContainer;
  185. }
  186. public function get PageList():Array {
  187. return _pageList;
  188. }
  189. public function get DocLoader():IDocumentLoader{
  190. return _docLoader;
  191. }
  192. public function set DocLoader(d:IDocumentLoader):void{
  193. _docLoader = d;
  194. }
  195. [Bindable]
  196. public function get ViewMode():String {
  197. return _viewMode;
  198. }
  199. [Bindable]
  200. public function get FitMode():String {
  201. return _fitMode;
  202. }
  203. public function set ViewMode(s:String):void {
  204. if(s!=_viewMode){
  205. for each (var vme:IFlexPaperViewModePlugin in ViewModeExtList){
  206. if(s == vme.Name){
  207. _currentExtViewMode = vme;
  208. }
  209. }
  210. if(s == ViewModeEnum.TILE&&ViewMode==ViewModeEnum.PORTRAIT){_pscale = _scale; _scale = 0.23;_paperContainer.verticalScrollPosition = 0;_fitMode = FitModeEnum.FITNONE;}else{_scale = _pscale;}
  211. _paperContainer.x = (s==ViewModeEnum.PORTRAIT||s==ViewModeEnum.TILE)?2.5:0;
  212. _viewMode = s;
  213. if(_initialized && _swfLoaded){createDisplayContainer();if(this._progressiveLoading){this.addInLoadedPages(true);}else{reCreateAllPages();}_displayContainer.visible = true;}
  214. FitMode = FitModeEnum.FITNONE;
  215. if(UsingExtViewMode){
  216. CurrExtViewMode.setViewMode(s);
  217. _viewMode = s;
  218. }
  219. dispatchEvent(new ViewModeChangedEvent(ViewModeChangedEvent.VIEWMODE_CHANGED,_viewMode));
  220. dispatchEvent(new ScaleChangedEvent(ScaleChangedEvent.SCALE_CHANGED,_scale));
  221. dispatchEvent(new FitModeChangedEvent(FitModeChangedEvent.FITMODE_CHANGED,_fitMode));
  222. }
  223. }
  224. public function set FitMode(s:String):void {
  225. if(_viewMode == ViewModeEnum.TILE){_fitMode = FitModeEnum.FITNONE;return}
  226. if(s!=_fitMode){
  227. _fitMode = s;
  228. switch(s){
  229. case FitModeEnum.FITWIDTH:
  230. fitWidth();
  231. break;
  232. case FitModeEnum.FITHEIGHT:
  233. fitHeight();
  234. break;
  235. }
  236. dispatchEvent(new FitModeChangedEvent(FitModeChangedEvent.FITMODE_CHANGED,_fitMode));
  237. }
  238. }
  239. public function set ProgressiveLoading(b1:Boolean):void {
  240. _progressiveLoading = b1;
  241. }
  242. [Bindable]
  243. public function get ProgressiveLoading():Boolean {
  244. return _progressiveLoading;
  245. }
  246. public function set TextSelectEnabled(b1:Boolean):void {
  247. _textSelectEnabled = b1;
  248. if(_textSelectEnabled && CursorsEnabled)
  249. dispatchEvent(new CursorModeChangedEvent(CursorModeChangedEvent.CURSORMODE_CHANGED,"TextSelectorCursor"));
  250. else
  251. dispatchEvent(new CursorModeChangedEvent(CursorModeChangedEvent.CURSORMODE_CHANGED,"ArrowCursor"));
  252. }
  253. [Bindable]
  254. public function get TextSelectEnabled():Boolean {
  255. return _textSelectEnabled;
  256. }
  257. [Bindable]
  258. public function get CursorsEnabled():Boolean {
  259. return _cursorsEnabled;
  260. }
  261. public function set CursorsEnabled(b:Boolean):void {
  262. _cursorsEnabled = b;
  263. }
  264. public function setPaperFocus():void{
  265. _paperContainer.setFocus();
  266. }
  267. public function get ZoomTransition():String {
  268. return _zoomtransition;
  269. }
  270. public function set ZoomTransition(s:String):void {
  271. _zoomtransition = s;
  272. }
  273. public function get ZoomTime():Number {
  274. return _zoomtime;
  275. }
  276. public function set ZoomTime(n:Number):void {
  277. _zoomtime = n;
  278. }
  279. public function get MinZoomSize():Number {
  280. return _minZoomSize;
  281. }
  282. public function set MinZoomSize(n:Number):void {
  283. _minZoomSize = n;
  284. }
  285. public function get MaxZoomSize():Number {
  286. return _maxZoomSize;
  287. }
  288. public function set MaxZoomSize(n:Number):void {
  289. _maxZoomSize = n;
  290. }
  291. public function get PluginList():Array{
  292. return _pluginList;
  293. }
  294. public function set PluginList(p:Array):void{
  295. _pluginList = p;
  296. }
  297. public function get CurrExtViewMode():IFlexPaperViewModePlugin{
  298. if(_currentExtViewMode != null && _currentExtViewMode.Name == ViewMode)
  299. return _currentExtViewMode;
  300. else{
  301. for each (var vme:IFlexPaperViewModePlugin in ViewModeExtList){
  302. if(ViewMode == vme.Name){
  303. _currentExtViewMode = vme;
  304. }
  305. }
  306. }
  307. return _currentExtViewMode;
  308. }
  309. public function get UsingExtViewMode():Boolean{
  310. if(ViewMode == ViewModeEnum.PORTRAIT || ViewMode == ViewModeEnum.TILE)
  311. return false;
  312. else
  313. return (CurrExtViewMode!=null && ViewMode == CurrExtViewMode.Name);
  314. }
  315. public function get ZoomInterval():Number {
  316. return _zoomInterval;
  317. }
  318. public function set ZoomInterval(n:Number):void {
  319. _zoomInterval = n;
  320. }
  321. [Bindable]
  322. public function get numPages():Number {
  323. return _numPages;
  324. }
  325. private function set numPages(n:Number):void {
  326. _numPages = n;
  327. }
  328. [Bindable]
  329. public function get numPagesLoaded():Number {
  330. return (_libMC!=null)?_libMC.framesLoaded:0;
  331. }
  332. private function set numPagesLoaded(n:Number):void {
  333. }
  334. [Bindable]
  335. public function get currPage():Number {
  336. return _currPage;
  337. }
  338. private function set currPage(n:Number):void {
  339. _currPage = n;
  340. }
  341. [Bindable]
  342. public function get SearchMatchAll():Boolean {
  343. if(SearchServiceUrl!=null && SearchServiceUrl.length>0)
  344. return false;
  345. else
  346. return _searchMatchAll;
  347. }
  348. public function set SearchMatchAll(b1:Boolean):void {
  349. _searchMatchAll = b1;
  350. }
  351. [Bindable]
  352. public function get SearchServiceUrl():String {
  353. return _searchServiceUrl;
  354. }
  355. public function set SearchServiceUrl(s1:String):void {
  356. _searchServiceUrl = unescape(s1);
  357. }
  358. public function get FitWidthOnLoad():Boolean {
  359. return _fitWidthOnLoad;
  360. }
  361. public function set FitWidthOnLoad(b1:Boolean):void {
  362. _fitWidthOnLoad = b1;
  363. }
  364. public function get FitPageOnLoad():Boolean {
  365. return _fitPageOnLoad;
  366. }
  367. public function set FitPageOnLoad(b2:Boolean):void {
  368. _fitPageOnLoad = b2;
  369. }
  370. public function gotoPage(p:Number, adjGotoPage:int=0):void{
  371. if(adjGotoPage!=0){_adjGotoPage=adjGotoPage;}
  372. if(p<1 || p-1 >_pageList.length)
  373. return;
  374. else{
  375. if(ViewMode == ViewModeEnum.PORTRAIT){
  376. _paperContainer.verticalScrollPosition = _pageList[p-1].y+3 + _adjGotoPage;
  377. }
  378. if(UsingExtViewMode)
  379. CurrExtViewMode.gotoPage(p,adjGotoPage);
  380. // retry if y is not set
  381. if(!UsingExtViewMode && p>1 && _pageList[p-1].y ==0)
  382. {
  383. flash.utils.setTimeout(gotoPage,200,p);
  384. }
  385. else
  386. _adjGotoPage = 0;
  387. repositionPapers();
  388. }
  389. }
  390. public function mvNext():void{
  391. if(UsingExtViewMode)
  392. CurrExtViewMode.mvNext();
  393. else
  394. if(currPage<numPages){gotoPage(currPage+1);}
  395. }
  396. public function mvPrev():void{
  397. if(UsingExtViewMode)
  398. CurrExtViewMode.mvPrev();
  399. else
  400. {
  401. if(currPage>1){gotoPage(currPage-1);}
  402. }
  403. }
  404. public function switchMode(mode:String=null):void{
  405. if(mode==null){ // no mode passed, just
  406. if(ViewMode == ViewModeEnum.PORTRAIT){ViewMode = ViewModeEnum.TILE;}
  407. else if(ViewMode == ViewModeEnum.TILE){_scale = _pscale; ViewMode = ViewModeEnum.PORTRAIT;}
  408. }else{
  409. if(ViewMode == mode && ViewMode != ViewModeEnum.PORTRAIT){
  410. ViewMode = ViewModeEnum.PORTRAIT;
  411. }
  412. else
  413. ViewMode = mode;
  414. }
  415. }
  416. public function get PaperVisible():Boolean {
  417. return _paperContainer.visible;
  418. }
  419. public function set PaperVisible(b:Boolean):void {
  420. _paperContainer.visible = b;
  421. }
  422. public function get SwfFile():String {
  423. return _swfFile;
  424. }
  425. public function getSwfFilePerPage(swfFile:String, page:int):String{
  426. var fileName:String = swfFile;
  427. var map:String = (fileName.substr(fileName.indexOf("[*,"),fileName.indexOf("]")-fileName.indexOf("[*,")+1));
  428. var padding:int = parseInt(map.substr(map.indexOf(",")+1,map.indexOf("]")-2));
  429. fileName = TextMapUtil.StringReplaceAll(fileName,map,padString(page.toString(),padding,"0"));
  430. return encodeURI(fileName);
  431. }
  432. public function set SwfFile(s:String):void {
  433. var pagesSplit:Boolean = false;
  434. s = unescape(s);
  435. if(s.length!=0){
  436. if(s.indexOf("{")>=0 && s.indexOf("}")>0){
  437. numPages = parseInt(s.substr(s.lastIndexOf(",")+1,s.indexOf("}")-s.lastIndexOf(",")-1));
  438. s = TextMapUtil.StringReplaceAll(s,"{","");
  439. s = TextMapUtil.StringReplaceAll(s,","+numPages.toString()+"}","");
  440. pagesSplit = true;
  441. }
  442. clearPlugins();
  443. deleteDisplayContainer();
  444. deletePageList();
  445. deleteLoaderPtr();
  446. deleteLoaderList();
  447. deleteFLoader();
  448. deleteSelectionMarker();
  449. TextMapUtil.totalFragments = "";
  450. if(s!=_swfFile)
  451. deleteLibMC();
  452. _swfFileChanged = true;
  453. _frameLoadCount = 0;
  454. if(!pagesSplit)
  455. _swfFile = encodeURI(s);
  456. else
  457. _swfFile = s;
  458. ViewMode = Viewer.InitViewMode;
  459. try{
  460. new flash.net.LocalConnection().connect('devaldiGCdummy');
  461. new flash.net.LocalConnection().connect('devaldiGCdummy');
  462. } catch (e:*) {}
  463. try{flash.system.System.gc();} catch (e:*) {}
  464. if(_docLoader!=null && !_docLoader.hasEventListener(SwfLoadedEvent.SWFLOADED)){
  465. _docLoader.PagesSplit = pagesSplit;
  466. _docLoader.addEventListener("onDocumentLoadedError", onDocumentLoadedErrorHandler,false,0,true);
  467. _docLoader.addEventListener(SwfLoadedEvent.SWFLOADED, swfComplete,false,0,true);
  468. }
  469. if(_docLoader!=null){
  470. _docLoader.stream.removeEventListener(ProgressEvent.PROGRESS, onLoadProgress);
  471. _docLoader.stream.addEventListener(ProgressEvent.PROGRESS, onLoadProgress,false,0,true);
  472. }
  473. if(_swfFile.length>0 && pagesSplit){
  474. _loadTimer = new Timer(100);
  475. _loadTimer.addEventListener("timer",loadtimer);
  476. _docLoader.load(new URLRequest(getSwfFilePerPage(_swfFile,1)),StreamUtil.getExecutionContext()); //new URLRequest(decodeURI(_swfFile))
  477. }
  478. else if(_swfFile.length > 0 && !pagesSplit)
  479. _docLoader.load(new URLRequest(_swfFile),StreamUtil.getExecutionContext());
  480. _paperContainer.verticalScrollPosition = 0;
  481. createDisplayContainer();
  482. // Changing the SWF file causes the component to invalidate.
  483. invalidateProperties();
  484. invalidateSize();
  485. invalidateDisplayList();
  486. }
  487. }
  488. [Bindable]
  489. public function get Scale():String {
  490. return _scale.toString();
  491. }
  492. public function get CurrentlySelectedText():String {
  493. return _currentlySelectedText;
  494. }
  495. public function Zoom(factor:Number):void{
  496. if(factor<_minZoomSize || factor>_maxZoomSize || factor == _scale)
  497. return;
  498. if((!UsingExtViewMode && _viewMode != ViewModeEnum.PORTRAIT) || (UsingExtViewMode && !CurrExtViewMode.doZoom)){return;}
  499. var _target:DisplayObject;
  500. _paperContainer.CenteringEnabled = (_paperContainer.width>0);
  501. _tweencount = _displayContainer.numChildren;
  502. for(var i:int=0;i<_displayContainer.numChildren;i++){
  503. _target = _displayContainer.getChildAt(i);
  504. _target.filters = null;
  505. Tweener.addTween(_target, {scaleX: factor, scaleY: factor, time: _zoomtime, transition: _zoomtransition, onComplete: tweenComplete});
  506. }
  507. FitMode = FitModeEnum.FITNONE;
  508. _scale = factor;
  509. dispatchEvent(new ScaleChangedEvent(ScaleChangedEvent.SCALE_CHANGED,_scale));
  510. }
  511. // rotate not finished.
  512. public function rotate():void{
  513. var counter:int=0;
  514. //Tweener.addTween(_displayContainer.getChildAt(currPage-1), {x:_displayContainer.getChildAt(currPage-1).parent.width/2+_displayContainer.getChildAt(currPage-1).height/2, y:((_displayContainer.getChildAt(currPage-1).height/2)-_displayContainer.getChildAt(currPage-1).width/2),rotation:90, time: 0.3, transition: 'easenone', onComplete: tweenComplete});
  515. }
  516. public function getFitWidthFactor():Number{
  517. _libMC.gotoAndStop(1);
  518. return (_paperContainer.width / _libMC.width) - 0.032; //- 0.03;
  519. }
  520. public function getFitHeightFactor():Number{
  521. _libMC.gotoAndStop(1);
  522. return (_paperContainer.height / _libMC.height);
  523. }
  524. public function fitWidth():void{
  525. if(_displayContainer.numChildren == 0){return;}
  526. var _target:DisplayObject;
  527. _paperContainer.CenteringEnabled = (_paperContainer.width>0);
  528. var factor:Number = getFitWidthFactor();
  529. _scale = factor;
  530. _tweencount = _displayContainer.numChildren;
  531. for(var i:int=0;i<_displayContainer.numChildren;i++){
  532. _target = _displayContainer.getChildAt(i);
  533. _target.filters = null;
  534. Tweener.addTween(_target, {scaleX:factor, scaleY:factor,time: 0, transition: 'easenone', onComplete: tweenComplete});
  535. }
  536. FitMode = FitModeEnum.FITWIDTH;
  537. dispatchEvent(new ScaleChangedEvent(ScaleChangedEvent.SCALE_CHANGED,_scale));
  538. }
  539. public function fitHeight():void{
  540. if(_displayContainer.numChildren == 0){return;}
  541. var _target:DisplayObject;
  542. _paperContainer.CenteringEnabled = (_paperContainer.height>0);
  543. var factor:Number = getFitHeightFactor();
  544. _scale = factor;
  545. _tweencount = _displayContainer.numChildren;
  546. for(var i:int=0;i<_displayContainer.numChildren;i++){
  547. _target = _displayContainer.getChildAt(i);
  548. _target.filters = null;
  549. Tweener.addTween(_target, {scaleX:factor, scaleY:factor,time: 0, transition: 'easenone', onComplete: tweenComplete});
  550. }
  551. FitMode = FitModeEnum.FITHEIGHT;
  552. dispatchEvent(new ScaleChangedEvent(ScaleChangedEvent.SCALE_CHANGED,_scale));
  553. }
  554. private function tweenComplete():void{
  555. _tweencount--;
  556. if(_tweencount==0){
  557. if(_loadTimer!=null)
  558. _loadTimer.start();
  559. repositionPapers();
  560. }
  561. if(_tweencount < numPagesLoaded - 2 || _tweencount == 0){
  562. PaperVisible = true;
  563. }
  564. }
  565. private function reScaleComplete():void{
  566. _tweencount--;
  567. if(_tweencount==0){
  568. if(_displayContainer.numChildren>0){
  569. _paperContainer.verticalScrollPosition = 0;
  570. if(_loadTimer!=null)
  571. _loadTimer.start();
  572. repositionPapers();
  573. }
  574. if(_tweencount < numPagesLoaded - 2 || _tweencount == 0){
  575. PaperVisible = true;
  576. }
  577. }
  578. }
  579. public function set Scale(s:String):void {
  580. var diff:Number = _scale - new Number(s);
  581. _scale = new Number(s);
  582. }
  583. override protected function createChildren():void {
  584. // Call the createChildren() method of the superclass.
  585. super.createChildren();
  586. this.styleName = "viewerBackground";
  587. // Bind events
  588. //_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, swfComplete);
  589. addEventListener(Event.RESIZE, sizeChanged,false,0,true);
  590. systemManager.stage.addEventListener(KeyboardEvent.KEY_DOWN, keyboardHandler,false,0,true);
  591. // Create a visible container for the swf
  592. _swfContainer = new Canvas();
  593. _swfContainer.visible = false;
  594. this.addChild(_swfContainer);
  595. // Create a timer to use for repainting
  596. _repaintTimer = new Timer(5,0);
  597. _repaintTimer.addEventListener("timer", repaintHandler);
  598. createDisplayContainer();
  599. }
  600. private function onframeenter(event:Event):void{
  601. if(!_dupImageClicked){return;}
  602. if(_docLoader!=null && _docLoader.PagesSplit) //todo:links not fixed yet for split up approach
  603. return;
  604. if(event.target.content != null){
  605. if (event.target.parent is DupImage &&
  606. event.target.content.currentFrame!=(event.target.parent as DupImage).dupIndex
  607. && _dupImageClicked){
  608. var np:int = event.target.content.currentFrame;
  609. event.target.content.gotoAndStop((event.target.parent as DupImage).dupIndex);
  610. gotoPage(np);
  611. }
  612. }
  613. }
  614. private function updComplete(event:Event):void {
  615. if(_scrollToPage>0){
  616. _paperContainer.verticalScrollPosition = _pageList[_scrollToPage-1].y;
  617. _paperContainer.horizontalScrollPosition = 0;
  618. _scrollToPage = 0;
  619. }
  620. repaint();
  621. //repositionPapers();
  622. }
  623. private function repaintHandler(e:Event):void {
  624. if(_loadTimer!=null){
  625. _loadTimer.reset();
  626. _loadTimer.start();
  627. }
  628. repositionPapers();
  629. _repaintTimer.stop();
  630. _repaintTimer.delay = 5;
  631. }
  632. private function loadtimer(e:Event):void {
  633. if(_loadTimer!=null)
  634. _loadTimer.stop();
  635. repositionPapers();
  636. }
  637. private function bytesLoaded(event:Event):void{
  638. event.target.loader.loaded = true;
  639. var bFound:Boolean=false;
  640. // Split up approach
  641. if(_docLoader!=null && _docLoader.PagesSplit){
  642. event.target.loader.loading = false;
  643. if(event.target.loader.content!=null && event.target.loader.content is MovieClip){event.target.loader.content.stop();}
  644. for(var i:int=0;i<_docLoader.LoaderList.length;i++){
  645. if(_docLoader.LoaderList[i].loading){
  646. bFound = true;
  647. break;
  648. }
  649. }
  650. _frameLoadCount = numPages;
  651. _bbusyloading = false;
  652. _displayContainer.visible = true;
  653. repaint();
  654. if(!bFound){
  655. dispatchEvent(new PageLoadedEvent(PageLoadedEvent.PAGE_LOADED,event.target.loader.pageStartIndex));
  656. if(_fitPageOnLoad){FitMode = FitModeEnum.FITHEIGHT;_fitPageOnLoad=false;_scrollToPage=1;_pscale=_scale;}
  657. if(_fitWidthOnLoad){FitMode = FitModeEnum.FITWIDTH;_fitWidthOnLoad=false;_scrollToPage=1;_pscale=_scale;}
  658. }
  659. }else{ // normal file approach
  660. if(event.target.loader.content!=null){event.target.loader.content.stop();}
  661. if(!ProgressiveLoading || (ProgressiveLoading && _libMC.framesLoaded == _libMC.totalFrames)){
  662. for(var i:int=0;i<_docLoader.LoaderList.length;i++){
  663. if(!_docLoader.LoaderList[i].loaded && !(_docLoader.LoaderList[i].parent is DupImage)){
  664. _docLoader.LoaderList[i].unloadAndStop(true);
  665. _docLoader.LoaderList[i].loadBytes(_inputBytes,StreamUtil.getExecutionContext());
  666. bFound = true;
  667. break;
  668. }
  669. }
  670. }
  671. if(!bFound){
  672. _bbusyloading = false;
  673. if(_fitPageOnLoad){FitMode = FitModeEnum.FITHEIGHT;_fitPageOnLoad=false;_scrollToPage=1;_pscale=_scale;}
  674. if(_fitWidthOnLoad){FitMode = FitModeEnum.FITWIDTH;_fitWidthOnLoad=false;_scrollToPage=1;_pscale=_scale;}
  675. _displayContainer.visible = true;
  676. if( _libMC.framesLoaded == _libMC.totalFrames && _frameLoadCount != _libMC.framesLoaded){
  677. dispatchEvent(new DocumentLoadedEvent(DocumentLoadedEvent.DOCUMENT_LOADED,numPages));
  678. _frameLoadCount = _libMC.framesLoaded;
  679. }
  680. }
  681. }
  682. }
  683. public function repositionPapers():void{
  684. if(_docLoader==null){return;}
  685. if(_docLoader!=null&&_docLoader.LoaderList==null||numPagesLoaded==0){return;}
  686. {
  687. var loaderidx:int=0;
  688. var bFoundFirst:Boolean = false;
  689. var _thumb:Bitmap;
  690. var _thumbData:BitmapData;
  691. var uloaderidx:int=0;
  692. var p:int=-1;
  693. var pl:int=0;
  694. for(var i:int=0;i<_pageList.length;i++){
  695. if(ViewMode == ViewModeEnum.TILE){
  696. if(!bFoundFirst && ((i) * (_pageList[i].height + 6)) >= _paperContainer.verticalScrollPosition){
  697. bFoundFirst = true;
  698. p = i + 1;
  699. }
  700. }
  701. else if(ViewMode == ViewModeEnum.PORTRAIT){
  702. if(!bFoundFirst)
  703. {
  704. var perH:int=0;
  705. if(_pageList.length>1)
  706. {
  707. perH=_pageList[1].y-_pageList[0].y;
  708. var nowP:Number=_paperContainer.verticalScrollPosition/(perH);
  709. if(0<nowP<0.5)
  710. p = 1;
  711. else if(nowP>=(_pageList.length-0.5)&&nowP<=_pageList.length)
  712. p = _pageList.length;
  713. else{
  714. p = Math.round(nowP)+1;
  715. if(_pageList.length>p-1&&_paperContainer.verticalScrollPosition<_pageList[p-1].y && p!=_pageList.length){
  716. p-=1;
  717. }
  718. }
  719. bFoundFirst = true;
  720. }
  721. else
  722. {
  723. bFoundFirst = true;
  724. p = 1;
  725. }
  726. }
  727. }
  728. if(p>numPages)
  729. return;
  730. if(UsingExtViewMode){
  731. if(currPage != CurrExtViewMode.currentPage)
  732. dispatchEvent(new CurrentPageChangedEvent(CurrentPageChangedEvent.PAGE_CHANGED,CurrExtViewMode.currentPage));
  733. p = CurrExtViewMode.currentPage;
  734. currPage = p;
  735. }
  736. if(p>0&&p!=_currPage){
  737. currPage = p;
  738. dispatchEvent(new CurrentPageChangedEvent(CurrentPageChangedEvent.PAGE_CHANGED,p));
  739. }
  740. if(_libMC!=null&&checkIsVisible(i)){
  741. if(_pageList[i].numChildren<4){
  742. if(ViewMode == ViewModeEnum.PORTRAIT){
  743. if(_docLoader.PagesSplit)
  744. uloaderidx = finduloaderIdx(_pageList[i].dupIndex);
  745. if(!_docLoader.PagesSplit || uloaderidx == -1)
  746. uloaderidx = (i==_pageList.length-1&&loaderidx+3<_docLoader.LoaderList.length)?loaderidx+3:(loaderidx<_docLoader.LoaderList.length)?loaderidx:0;
  747. if(!_docLoader.PagesSplit){
  748. if(!_bbusyloading && _docLoader.LoaderList!=null && _docLoader.LoaderList.length>0){
  749. if(numPagesLoaded>=_pageList[i].dupIndex && _docLoader.LoaderList[uloaderidx] != null && _docLoader.LoaderList[uloaderidx].content==null||(_docLoader.LoaderList[uloaderidx].content!=null&&_docLoader.LoaderList[uloaderidx].content.framesLoaded<_pageList[i].dupIndex)){
  750. _bbusyloading = true;
  751. _docLoader.LoaderList[uloaderidx].unloadAndStop(true);
  752. _docLoader.LoaderList[uloaderidx].loadBytes(_inputBytes,StreamUtil.getExecutionContext());
  753. flash.utils.setTimeout(repositionPapers,200);
  754. }
  755. }
  756. if((i<2||_pageList[i].numChildren==0||(_pageList[i]!=null&&_docLoader.LoaderList[uloaderidx]!=null&&_docLoader.LoaderList[uloaderidx].content!=null&&_docLoader.LoaderList[uloaderidx].content.currentFrame!=_pageList[i].dupIndex)) && _docLoader.LoaderList[uloaderidx] != null && _docLoader.LoaderList[uloaderidx].content != null){
  757. if(numPagesLoaded >= _pageList[i].dupIndex){
  758. _docLoader.LoaderList[uloaderidx].content.gotoAndStop(_pageList[i].dupIndex);
  759. _pageList[i].addChild(_docLoader.LoaderList[uloaderidx]);
  760. _pageList[i].loadedIndex = _pageList[i].dupIndex;
  761. /*
  762. if(_libMC.width*_scale>0&&_libMC.height*_scale>0){
  763. _libMC.gotoAndStop(_pageList[i].dupIndex);
  764. _thumbData = new BitmapData(_libMC.width*_scale, _libMC.height*_scale, false, 0xFFFFFF);
  765. _thumb = new Bitmap(_thumbData);
  766. _pageList[i].source = _thumb;
  767. _thumbData.draw(_libMC,new Matrix(_scale, 0, 0, _scale),null,null,null,true);
  768. } */
  769. }
  770. }
  771. }
  772. if(_docLoader.PagesSplit){
  773. if(!_bbusyloading && _docLoader.LoaderList!=null && _docLoader.LoaderList.length>0){
  774. if(_docLoader.LoaderList[uloaderidx] != null && _docLoader.LoaderList[uloaderidx].pageStartIndex != _pageList[i].dupIndex && !_loadTimer.running && !_docLoader.LoaderList[uloaderidx].loading){
  775. dispatchEvent(new PageLoadingEvent(PageLoadingEvent.PAGE_LOADING,_pageList[i].dupIndex));
  776. try{
  777. _pageList[i].resetPage(_libMC.width,_libMC.height,_scale,true);
  778. _docLoader.LoaderList[uloaderidx].unloadAndStop(true);
  779. _docLoader.LoaderList[uloaderidx].loaded = false;
  780. _docLoader.LoaderList[uloaderidx].loading = true;
  781. _docLoader.LoaderList[uloaderidx].load(new URLRequest(getSwfFilePerPage(_swfFile,_pageList[i].dupIndex)),StreamUtil.getExecutionContext());
  782. _docLoader.LoaderList[uloaderidx].pageStartIndex = _pageList[i].dupIndex;
  783. }catch(err:IOErrorEvent){}
  784. repaint();
  785. }
  786. }
  787. if((_pageList[i].numChildren==0||(_pageList[i]!=null&&_docLoader.LoaderList[uloaderidx]!=null&&_docLoader.LoaderList[uloaderidx].content!=null)) && _docLoader.LoaderList[uloaderidx] != null && _docLoader.LoaderList[uloaderidx].content != null && _docLoader.LoaderList[uloaderidx].loaded && _docLoader.LoaderList[uloaderidx].pageStartIndex == _pageList[i].dupIndex){
  788. if(numPagesLoaded >= _pageList[i].dupIndex||true){
  789. if(_docLoader.LoaderList[uloaderidx].parent != null)
  790. _docLoader.LoaderList[uloaderidx].parent.removeChild(_docLoader.LoaderList[uloaderidx]);
  791. _pageList[i].addChild(_docLoader.LoaderList[uloaderidx]);
  792. _pageList[i].loadedIndex = _pageList[i].dupIndex;
  793. if(_performSearchOnPageLoad && _pendingSearchPage == _pageList[i].dupIndex){
  794. _performSearchOnPageLoad = false;
  795. searchTextByService(prevSearchText)
  796. }
  797. }
  798. }
  799. }
  800. }else if(ViewMode == ViewModeEnum.TILE && _pageList[i].source == null && (numPagesLoaded >= _pageList[i].dupIndex||_docLoader.PagesSplit)){
  801. if(!_docLoader.PagesSplit){
  802. _libMC.gotoAndStop(_pageList[i].dupIndex);
  803. _thumbData = new BitmapData(_libMC.width*_scale, _libMC.height*_scale, false, 0xFFFFFF);
  804. _thumb = new Bitmap(_thumbData);
  805. _pageList[i].source = _thumb;
  806. _thumbData.draw(_libMC.getDocument(),new Matrix(_scale, 0, 0, _scale),null,null,null,true);
  807. }else{
  808. if(!_bbusyloading && !_loadTimer.running && _docLoader.LoaderList!=null && _docLoader.LoaderList.length>0 && !_docLoader.LoaderList[uloaderidx].loading){
  809. dispatchEvent(new PageLoadingEvent(PageLoadingEvent.PAGE_LOADING,_pageList[i].dupIndex));
  810. try{
  811. _pageList[i].resetPage(_libMC.width,_libMC.height,_scale,true);
  812. _docLoader.LoaderList[uloaderidx].loaded = false;
  813. _docLoader.LoaderList[uloaderidx].loading = true;
  814. _docLoader.LoaderList[uloaderidx].load(new URLRequest(getSwfFilePerPage(_swfFile,_pageList[i].dupIndex)),StreamUtil.getExecutionContext());
  815. _docLoader.LoaderList[uloaderidx].pageStartIndex = _pageList[i].dupIndex;
  816. }catch(err:IOErrorEvent){}
  817. repaint();
  818. }
  819. if(_docLoader.LoaderList[uloaderidx].pageStartIndex == _pageList[i].dupIndex && _pageList[i].loadedIndex != _pageList[i].dupIndex && _docLoader.LoaderList[uloaderidx].content!=null){
  820. _thumbData = new BitmapData(_docLoader.LoaderList[uloaderidx].width*_scale, _docLoader.LoaderList[uloaderidx].height*_scale, false, 0xFFFFFF);
  821. _thumb = new Bitmap(_thumbData);
  822. _pageList[i].source = _thumb;
  823. _pageList[i].loadedIndex = _pageList[i].dupIndex;
  824. _thumbData.draw(_docLoader.LoaderList[uloaderidx],new Matrix(_scale, 0, 0, _scale),null,null,null,true);
  825. }
  826. }
  827. if(_pluginList!=null){
  828. for(pl=0;pl<_pluginList.length;pl++){
  829. _pluginList[pl].drawSelf(i,_thumbData,_scale);
  830. }
  831. }
  832. }
  833. }
  834. if(UsingExtViewMode){
  835. CurrExtViewMode.renderPage(i);
  836. CurrExtViewMode.renderSelection(i,_selectionMarker);
  837. }
  838. if((_viewMode == ViewModeEnum.PORTRAIT) && _selectionMarker != null){
  839. if(i+1 == searchPageIndex && _selectionMarker.parent != _pageList[i]){
  840. _pageList[i].addChildAt(_selectionMarker,_pageList[i].numChildren);
  841. }else if(i+1 == searchPageIndex && _selectionMarker.parent == _pageList[i]){
  842. _pageList[i].setChildIndex(_selectionMarker,_pageList[i].numChildren -1);
  843. }
  844. }
  845. if(_viewMode != ViewModeEnum.TILE){
  846. if(_pluginList!=null){
  847. for(pl=0;pl<_pluginList.length;pl++){
  848. _pluginList[pl].drawSelf(i,_pageList[i],_scale);
  849. }
  850. }
  851. }
  852. if(_viewMode != ViewModeEnum.TILE && !UsingExtViewMode && _markList[i] != null){
  853. if(_markList[i].parent != _pageList[i]){
  854. _pageList[i].addChildAt(_markList[i],_pageList[i].numChildren);
  855. }else{
  856. _pageList[i].setChildIndex(_markList[i],_pageList[i].numChildren -1);
  857. }
  858. }
  859. if(UsingExtViewMode && _markList[i] != null){
  860. CurrExtViewMode.renderMark(_markList[i],i);
  861. }
  862. loaderidx++;
  863. }else{
  864. if(_pageList[i].numChildren>0 || _pageList[i].source != null){
  865. _pageList[i].source = null;
  866. if(_tweencount == 0)
  867. _pageList[i].resetPage(_libMC.width,_libMC.height,_scale);
  868. else
  869. _pageList[i].removeAllChildren();
  870. _pageList[i].loadedIndex = -1;
  871. }
  872. }
  873. }
  874. }
  875. }
  876. private function padString(_str:String, _n:Number, _pStr:String):String
  877. {
  878. var _rtn:String = _str;
  879. if ((_pStr == null) || (_pStr.length < 1))
  880. {
  881. _pStr = " ";
  882. }
  883. if (_str.length < _n)
  884. {
  885. var _s:String = "";
  886. for (var i:Number = 0 ; i < (_n - _str.length) ; i++)
  887. {
  888. _s += _pStr;
  889. }
  890. _rtn = _s + _str;
  891. }
  892. return _rtn;
  893. }
  894. private function finduloaderIdx(idx:int):int{
  895. for(var i:int=0;i<_docLoader.LoaderList.length;i++){
  896. if(_docLoader.LoaderList[i].pageStartIndex == idx)
  897. return i;
  898. }
  899. for(var i:int=0;i<_docLoader.LoaderList.length;i++){
  900. if(!checkIsVisible(_docLoader.LoaderList[i].pageStartIndex))
  901. return i;
  902. }
  903. return -1;
  904. }
  905. public function repaint():void{
  906. _repaintTimer.reset();_repaintTimer.start();
  907. }
  908. private function checkIsVisible(pageIndex:int):Boolean{
  909. try{
  910. if(ViewMode == ViewModeEnum.TILE){
  911. return _pageList[pageIndex].parent.y + _pageList[pageIndex].height >= _paperContainer.verticalScrollPosition &&
  912. (_pageList[pageIndex].parent.y - _pageList[pageIndex].height) < (_paperContainer.verticalScrollPosition + _paperContainer.height);
  913. }
  914. else if(!UsingExtViewMode){
  915. if(_paperContainer.height <= 0)
  916. return false;
  917. return (_pageList[pageIndex].y + (_pageList[pageIndex].getScaledHeight() + 6)) >= _paperContainer.verticalScrollPosition &&
  918. (_pageList[pageIndex].y - (_pageList[pageIndex].getScaledHeight() + 6)) < (_paperContainer.verticalScrollPosition + _paperContainer.height);
  919. }
  920. if(UsingExtViewMode)
  921. return CurrExtViewMode.checkIsVisible(pageIndex);
  922. }catch(e:Error){
  923. return false;
  924. }
  925. return false;
  926. }
  927. public function createDisplayContainer():void{
  928. if(_skinImgDo != null && _skinImgDo.parent == this){
  929. removeChild(_skinImgDo);
  930. _skinImgDo.removeEventListener(MouseEvent.MOUSE_OVER,skinMouseOver);
  931. _skinImgDo.removeEventListener(MouseEvent.MOUSE_OUT,skinMouseOut);
  932. _skinImgDo.removeEventListener(MouseEvent.MOUSE_DOWN,skinMouseDown);
  933. }
  934. _skinImgDo = new Image();
  935. _skinImgDo.source = _skinImg;
  936. _skinImgDo.x = this.width-_skinImg.width - 27; _skinImgDo.y = this.height-_skinImg.height - 10;
  937. _skinImgDo.addEventListener(MouseEvent.MOUSE_OVER,skinMouseOver,false,0,true);
  938. _skinImgDo.addEventListener(MouseEvent.MOUSE_OUT,skinMouseOut,false,0,true);
  939. _skinImgDo.addEventListener(MouseEvent.MOUSE_DOWN,skinMouseDown,false,0,true);
  940. _skinImgDo.buttonMode = true;
  941. addChild(_skinImgDo);
  942. // Add the swf to the invisible container.
  943. _swfContainer.removeAllChildren();
  944. var uic:UIComponent = new UIComponent();
  945. _swfContainer.addChild(uic);
  946. if(_docLoader!=null && _docLoader.DocumentContainer != null)
  947. uic.addChild(_docLoader.DocumentContainer);
  948. if(_paperContainer !=null && _paperContainer.parent == this){
  949. removeChild(_paperContainer);
  950. _paperContainer.removeEventListener(FlexEvent.UPDATE_COMPLETE,updComplete);
  951. _paperContainer.removeEventListener(MouseEvent.MOUSE_WHEEL, wheelHandler);
  952. }
  953. _paperContainer = new ZoomCanvas();
  954. _paperContainer.percentHeight = 100;
  955. _paperContainer.percentWidth = 100;
  956. _paperContainer.addEventListener(FlexEvent.UPDATE_COMPLETE,updComplete,false,0,true);
  957. _paperContainer.x = (ViewMode==ViewModeEnum.PORTRAIT||ViewMode==ViewModeEnum.TILE)?2.5:0;
  958. _paperContainer.addEventListener(MouseEvent.MOUSE_WHEEL, wheelHandler,false,0,true);
  959. _paperContainer.setStyle("horizontalGap",1);
  960. _paperContainer.setStyle("verticalGap",0);
  961. addChildAt(_paperContainer,getChildIndex(_skinImgDo)-1);
  962. try{
  963. new flash.net.LocalConnection().connect('devaldiGCdummy');
  964. new flash.net.LocalConnection().connect('devaldiGCdummy');
  965. } catch (e:*) {}
  966. try{flash.system.System.gc();} catch (e:*) {}
  967. if(_paperContainer.numChildren>0){_paperContainer.removeAllChildren();}
  968. deleteDisplayContainer();
  969. if(_viewMode == ViewModeEnum.TILE){
  970. _displayContainer = new FlowBox();
  971. _displayContainer.setStyle("horizontalAlign", "left");
  972. _paperContainer.horizontalScrollPolicy = "off";
  973. _scale = 0.243;
  974. _paperContainer.addChild(_displayContainer);
  975. _paperContainer.childrenDoDrag = true;
  976. _initialized=true;
  977. }
  978. else if(UsingExtViewMode){
  979. _initialized = CurrExtViewMode.initComponent(this);
  980. }
  981. else{
  982. _displayContainer = new FlowVBox();
  983. _displayContainer.setStyle("horizontalAlign", "center");
  984. _paperContainer.addChild(_displayContainer);
  985. _paperContainer.childrenDoDrag = true;
  986. _initialized=true;
  987. }
  988. _displayContainer.verticalScrollPolicy = "off";
  989. _displayContainer.horizontalScrollPolicy = "off";
  990. _displayContainer.setStyle("verticalAlign", "center");
  991. _displayContainer.percentHeight = 100;
  992. _displayContainer.percentWidth = (ViewMode==ViewModeEnum.PORTRAIT)?96:100;
  993. _displayContainer.useHandCursor = true;
  994. _displayContainer.addEventListener(MouseEvent.ROLL_OVER,displayContainerrolloverHandler,false,0,true);
  995. _displayContainer.addEventListener(MouseEvent.ROLL_OUT,displayContainerrolloutHandler,false,0,true);
  996. _displayContainer.addEventListener(MouseEvent.MOUSE_DOWN,displayContainerMouseDownHandler,false,0,true);
  997. _displayContainer.addEventListener(MouseEvent.MOUSE_UP,displayContainerMouseUpHandler,false,0,true);
  998. _displayContainer.addEventListener(MouseEvent.DOUBLE_CLICK,displayContainerDoubleClickHandler,false,0,true);
  999. //_displayContainer.mouseChildren = false;
  1000. _displayContainer.doubleClickEnabled = true;
  1001. }
  1002. private function displayContainerrolloverHandler(event:MouseEvent):void{
  1003. if(_viewMode==ViewModeEnum.PORTRAIT||(UsingExtViewMode && CurrExtViewMode.supportsTextSelect)){
  1004. if(TextSelectEnabled && CursorsEnabled){
  1005. _grabCursorID = CursorManager.setCursor(MenuIcons.TEXT_SELECT_CURSOR);
  1006. }else if(CursorsEnabled){
  1007. resetCursor();
  1008. }
  1009. }
  1010. }
  1011. private function displayContainerMouseUpHandler(event:MouseEvent):void{
  1012. if(_viewMode==ViewModeEnum.PORTRAIT||(UsingExtViewMode && CurrExtViewMode.supportsTextSelect)){
  1013. if(CursorsEnabled)
  1014. CursorManager.removeCursor(_grabbingCursorID);
  1015. if(TextSelectEnabled && CursorsEnabled){
  1016. _grabCursorID = CursorManager.setCursor(MenuIcons.TEXT_SELECT_CURSOR);
  1017. }else if(CursorsEnabled && !(event.target is IFlexPaperPluginControl) || (event.target.parent !=null && event.target.parent.parent !=null && event.target.parent.parent is IFlexPaperPluginControl)){
  1018. resetCursor();
  1019. }
  1020. }
  1021. }
  1022. private function displayContainerDoubleClickHandler(event:MouseEvent):void{
  1023. if(TextSelectEnabled){return;}
  1024. if(ViewMode == ViewModeEnum.PORTRAIT)
  1025. FitMode = (FitMode == FitModeEnum.FITWIDTH)?FitModeEnum.FITHEIGHT:FitModeEnum.FITWIDTH;
  1026. if(UsingExtViewMode)
  1027. CurrExtViewMode.handleDoubleClick(event);
  1028. }
  1029. private function displayContainerMouseDownHandler(event:MouseEvent):void{
  1030. if(_viewMode==ViewModeEnum.PORTRAIT||(UsingExtViewMode && CurrExtViewMode.supportsTextSelect)){
  1031. if(CursorsEnabled)
  1032. CursorManager.removeCursor(_grabCursorID);
  1033. if(TextSelectEnabled && CursorsEnabled){
  1034. _grabbingCursorID = CursorManager.setCursor(MenuIcons.TEXT_SELECT_CURSOR);
  1035. }else if(CursorsEnabled){
  1036. _grabbingCursorID = CursorManager.setCursor(MenuIcons.GRABBING);
  1037. }
  1038. }
  1039. if(UsingExtViewMode)
  1040. CurrExtViewMode.handleMouseDown(event);
  1041. }
  1042. private function displayContainerrolloutHandler(event:Event):void{
  1043. if(CursorsEnabled)
  1044. CursorManager.removeAllCursors();
  1045. }
  1046. private function wheelHandler(evt:MouseEvent):void {
  1047. _paperContainer.removeEventListener(MouseEvent.MOUSE_WHEEL, wheelHandler);
  1048. var t:Timer = new Timer(1,1);
  1049. t.addEventListener("timer", addMouseScrollListener,false,0,true);
  1050. t.start();
  1051. _paperContainer.dispatchEvent(evt.clone());
  1052. }
  1053. private function addMouseScrollListener(e:Event):void {
  1054. _paperContainer.addEventListener(MouseEvent.MOUSE_WHEEL, wheelHandler,false,0,true);
  1055. }
  1056. private function keyboardHandler(event:KeyboardEvent):void{
  1057. if(event.keyCode == Keyboard.DOWN){
  1058. _paperContainer.verticalScrollPosition = _paperContainer.verticalScrollPosition + 10;
  1059. }
  1060. if(event.keyCode == Keyboard.UP){
  1061. _paperContainer.verticalScrollPosition = _paperContainer.verticalScrollPosition - 10;
  1062. }
  1063. if(event.keyCode == Keyboard.PAGE_DOWN){
  1064. _paperContainer.verticalScrollPosition = _paperContainer.verticalScrollPosition + 300;
  1065. }
  1066. if(event.keyCode == Keyboard.PAGE_UP){
  1067. _paperContainer.verticalScrollPosition = _paperContainer.verticalScrollPosition - 300;
  1068. }
  1069. if(event.keyCode == Keyboard.HOME){
  1070. _paperContainer.verticalScrollPosition = 0;
  1071. }
  1072. if(event.keyCode == Keyboard.END){
  1073. _paperContainer.verticalScrollPosition = _paperContainer.maxVerticalScrollPosition;
  1074. }
  1075. }
  1076. private function sizeChanged(evt:Event):void{
  1077. _skinImgDo.source = _skinImg;
  1078. _skinImgDo.x = this.width-_skinImg.width - 27; _skinImgDo.y = this.height-_skinImg.height - 10;
  1079. }
  1080. private function skinMouseOver(evt:MouseEvent):void{
  1081. _skinImgDo.addChild(_skinImgc);
  1082. }
  1083. private function skinMouseOut(evt:MouseEvent):void{
  1084. if(_skinImgc.parent==_skinImgDo){_skinImgDo.removeChild(_skinImgc);}
  1085. }
  1086. private function skinMouseDown(evt:MouseEvent):void{
  1087. dispatchEvent(new Event("onLogoClicked"));
  1088. }
  1089. override protected function commitProperties():void {
  1090. super.commitProperties();
  1091. if(_swfFileChanged && _swfFile != null && _swfFile.length > 0){ // handler for when the Swf file has changed.
  1092. dispatchEvent(new Event("onDocumentLoading"));
  1093. _swfFileChanged = false;
  1094. }
  1095. }
  1096. private function resizeMc(mc:MovieClip, maxW:Number, maxH:Number=0, constrainProportions:Boolean=true):void{
  1097. maxH = maxH == 0 ? maxW : maxH;
  1098. mc.width = maxW;
  1099. mc.height = maxH;
  1100. if (constrainProportions) {
  1101. mc.scaleX < mc.scaleY ? mc.scaleY = mc.scaleX : mc.scaleX = mc.scaleY;
  1102. }
  1103. }
  1104. private function onLoadProgress(event:ProgressEvent):void{
  1105. var e:ProgressEvent = new ProgressEvent("onLoadingProgress")
  1106. e.bytesTotal = event.bytesTotal;
  1107. e.bytesLoaded = event.bytesLoaded;
  1108. dispatchEvent(e);
  1109. }
  1110. private function onDocumentLoadedErrorHandler(event:Event):void{
  1111. dispatchEvent(event);
  1112. }
  1113. private function swfComplete(event:SwfLoadedEvent):void{
  1114. if(!ProgressiveLoading){
  1115. try{
  1116. if(event.swfObject.content != null && (event.swfObject.content is MovieClip || event.swfObject.content is Bitmap))
  1117. _libMC = new SwfDocument(event.swfObject.content as DisplayObject);
  1118. DupImage.paperSource = _libMC.getDocument();
  1119. }catch(e:Error){
  1120. if(!_docLoader.Resigned){_docLoader.signFileHeader(_docLoader.InputBytes);return;}
  1121. }
  1122. if((_libMC == null || (event.swfObject!=null && event.swfObject.content != null && event.swfObject.content is AVM1Movie)) && !_docLoader.Resigned){_docLoader.signFileHeader(_docLoader.InputBytes);return;}
  1123. _inputBytes = _docLoader.InputBytes;
  1124. if(_libMC.height>0&&_docLoader.LoaderList==null){createLoaderList();}
  1125. if(!_docLoader.PagesSplit)
  1126. numPages = _libMC.totalFrames;
  1127. _swfLoaded = true
  1128. _libMC.getDocument().cacheAsBitmap = true;
  1129. _libMC.getDocument().opaqueBackground = 0xFFFFFF;
  1130. reCreateAllPages();
  1131. _bbusyloading = false;
  1132. repositionPapers();
  1133. //dispatchEvent(new DocumentLoadedEvent(DocumentLoadedEvent.DOCUMENT_LOADED,numPages));
  1134. }else{
  1135. if(event.swfObject.content != null){
  1136. var mobj:Object = event.swfObject.content;
  1137. var firstLoad:Boolean = false;
  1138. if(mobj is AVM1Movie || _loaderptr != null){
  1139. _inputBytes = _docLoader.InputBytes;
  1140. if(_loaderptr==null){
  1141. _docLoader.postProcessBytes(_inputBytes);
  1142. _loaderptr = new Loader();
  1143. _loaderptr.contentLoaderInfo.addEventListener(Event.COMPLETE, swfComplete,false,0,true);
  1144. }
  1145. _docLoader.signFileHeader(_inputBytes,_loaderptr);
  1146. _loaderptr.unloadAndStop(true);
  1147. _loaderptr.loadBytes(_inputBytes,StreamUtil.getExecutionContext());
  1148. }
  1149. if(mobj is MovieClip){
  1150. _libMC = new SwfDocument(mobj as MovieClip);
  1151. _libMC.getDocument().cacheAsBitmap = true;
  1152. _libMC.getDocument().opaqueBackground = 0xFFFFFF;
  1153. if(_libMC.height>0&&_docLoader.LoaderList==null){createLoaderList();}
  1154. DupImage.paperSource = _libMC.getDocument();
  1155. if(!_docLoader.PagesSplit)
  1156. numPages = _libMC.totalFrames;
  1157. firstLoad = _pageList == null || (_pageList.length == 0 && numPages > 0);
  1158. if(_loaderptr==null){_inputBytes = _docLoader.InputBytes;}else{_inputBytes = _loaderptr.contentLoaderInfo.bytes;}
  1159. if(_libMC.framesLoaded > 0)
  1160. addInLoadedPages();
  1161. flash.utils.setTimeout(function():void{
  1162. try{
  1163. var bDocLoaded:Boolean=(_libMC.framesLoaded == _

Large files files are truncated, but you can click here to view the full file