working (though incomplete) 900913;
[potlatch2.git] / net / systemeD / halcyon / styleparser / RuleSet.as
1 package net.systemeD.halcyon.styleparser {
2
3         import flash.events.*;
4         import flash.net.*;
5         import net.systemeD.halcyon.Globals;
6         import net.systemeD.halcyon.Map;
7         import net.systemeD.halcyon.ImageURLLoader;
8     import net.systemeD.halcyon.connection.Entity;
9 //      import bustin.dev.Inspector;
10         
11         public class RuleSet {
12
13                 private var map:Map;
14                 public var choosers:Array=new Array();  // list of StyleChoosers
15                 public var images:Object=new Object();  // loaded images
16                 private var iconCallback:Function=null; // function to call when all icons loaded
17                 private var iconsToLoad:uint=0;                 // number of icons left to load (fire callback when ==0)
18
19                 // variables for name, author etc.
20
21                 public function RuleSet(m:Map,f:Function=null):void {
22                         map=m;
23                         iconCallback=f;
24                 }
25
26                 // Get styles for an object
27
28                 public function getStyles(obj:Entity,tags:Object):StyleList {
29                         var sl:StyleList=new StyleList();
30                         for each (var sc:StyleChooser in choosers) {
31                                 sc.updateStyles(obj,tags,sl);
32                         }
33                         return sl;
34                 }
35
36                 // ---------------------------------------------------------------------------------------------------------
37                 // Loading stylesheet
38
39                 public function loadFromCSS(url:String):void {
40                         var request:URLRequest=new URLRequest(url);
41                         var loader:URLLoader=new URLLoader();
42
43                         request.method=URLRequestMethod.GET;
44                         loader.dataFormat = URLLoaderDataFormat.TEXT;
45                         loader.addEventListener(Event.COMPLETE,                                         loadedCSS,                              false, 0, true);
46                         loader.addEventListener(HTTPStatusEvent.HTTP_STATUS,            httpStatusHandler,              false, 0, true);
47                         loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR,      securityErrorHandler,   false, 0, true);
48                         loader.addEventListener(IOErrorEvent.IO_ERROR,                          ioErrorHandler,                 false, 0, true);
49                         loader.load(request);
50                 }
51
52                 private function loadedCSS(event:Event):void {
53                         var css:MapCSS=new MapCSS(map);
54                         choosers=css.parse(event.target.data);
55 //                      Inspector.getInstance().show();
56 //                      Inspector.getInstance().shelf('Choosers', choosers);
57                         loadImages();
58                 }
59
60
61                 // ------------------------------------------------------------------------------------------------
62                 // Load all referenced images
63                 // ** will duplicate if referenced twice, shouldn't
64                 
65                 public function loadImages():void {
66                         var filename:String;
67                         for each (var chooser:StyleChooser in choosers) {
68                                 for each (var style:Style in chooser.styles) {
69                                         if      (style is PointStyle  && PointStyle(style).icon_image   ) { filename=PointStyle(style).icon_image; }
70                                         else if (style is ShapeStyle  && ShapeStyle(style).fill_image   ) { filename=ShapeStyle(style).fill_image; }
71                                         else if (style is ShieldStyle && ShieldStyle(style).shield_image) { filename=ShieldStyle(style).shield_image; }
72                                         else { continue; }
73                                 
74                                         iconsToLoad++;
75                                         var request:URLRequest=new URLRequest(filename);
76                                         var loader:ImageURLLoader=new ImageURLLoader();
77                                         loader.dataFormat=URLLoaderDataFormat.BINARY;
78                                         loader.filename=filename;
79                                         loader.addEventListener(Event.COMPLETE,                                         loadedImage,                    false, 0, true);
80                                         loader.addEventListener(HTTPStatusEvent.HTTP_STATUS,            httpStatusHandler,              false, 0, true);
81                                         loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR,      securityErrorHandler,   false, 0, true);
82                                         loader.addEventListener(IOErrorEvent.IO_ERROR,                          ioErrorHandler,                 false, 0, true);
83                                         loader.load(request);
84                                 }
85                         }
86                 }
87
88                 // data handler
89
90                 private function loadedImage(event:Event):void {
91 Globals.vars.root.addDebug("adding image at "+event.target.filename);
92                         images[event.target.filename]=event.target.data;
93                         iconsToLoad--;
94                         if (iconsToLoad==0 && iconCallback!=null) { iconCallback(); }
95                 }
96
97                 private function httpStatusHandler( event:HTTPStatusEvent ):void { }
98                 private function securityErrorHandler( event:SecurityErrorEvent ):void { Globals.vars.root.addDebug("securityerrorevent"); }
99                 private function ioErrorHandler( event:IOErrorEvent ):void { Globals.vars.root.addDebug("ioerrorevent"); }
100
101         }
102 }