Merge branch 'staging'
[potlatch2.git] / net / systemeD / halcyon / styleparser / StyleList.as
1 package net.systemeD.halcyon.styleparser {
2
3     /** A StyleList object is the full list of all styles applied to
4                 a drawn entity (i.e. node/way).                                                                                                 <p>
5
6                 Each array element applies to that sublayer (z-index). If there
7                 is no element, nothing is drawn on that sublayer.                                                               </p><p>
8                 
9                 StyleLists are created by StyleChooser.getStyles.                                                               </p>
10                 
11                 @see net.systemeD.halcyon.styleparser.StyleChooser
12     */
13
14         public class StyleList {
15
16                 public var shapeStyles:Object={};
17                 public var textStyles:Object={};
18                 public var pointStyles:Object={};
19                 public var shieldStyles:Object={};
20                 public var maxwidth:Number=0;
21
22                 /** List of sublayers used in this StyleList. */
23                 public var sublayers:Array=[];
24
25         /** Zoom level this StyleList is valid at. If -1, valid at all styles (i.e. doesn't need to be recomputed
26                         on zoom in/out); otherwise, specifies a single zoom level. */
27                 public var validAt:int=-1;
28
29                 /** Does this StyleList contain any styles? */
30                 public function hasStyles():Boolean {
31                         return ( hasShapeStyles() || hasTextStyles() || hasPointStyles() || hasShieldStyles() );
32                 }
33
34                 /** Does this StyleList contain any styles with a fill? */
35                 public function hasFills():Boolean {
36                         for each (var ss:ShapeStyle in shapeStyles) {
37                                 if (!isNaN(ss.fill_color) || ss.fill_image) return true;
38                         }
39                         return false;
40                 }
41
42                 /** Does this StyleList manually force an OSM layer? */
43                 public function layerOverride():Number {
44                         for each (var ss:ShapeStyle in shapeStyles) {
45                                 if (ss['layer']) return ss['layer'];
46                         }
47                         return NaN;
48                 }
49                 
50                 /** Record that a sublayer is used in this StyleList. */
51                 public function addSublayer(s:Number):void {
52                         if (sublayers.indexOf(s)==-1) { sublayers.push(s); }
53                 }
54
55                 /** Summarise StyleList as String - for debugging. */
56                 public function toString():String {
57                         var str:String='';
58                         var k:String;
59                         for (k in shapeStyles) { str+="- SS "+k+"="+shapeStyles[k]+"\n"; }
60                         for (k in textStyles) { str+="- TS "+k+"="+textStyles[k]+"\n"; }
61                         for (k in pointStyles) { str+="- PS "+k+"="+pointStyles[k]+"\n"; }
62                         for (k in shieldStyles) { str+="- sS "+k+"="+shieldStyles[k]+"\n"; }
63                         return str;
64                 }
65
66                 /** Is this StyleList valid at a given zoom? */
67                 public function isValidAt(zoom:uint):Boolean {
68                         return (validAt==-1 || validAt==zoom);
69                 }
70
71                 private function hasShapeStyles():Boolean  { for (var a:String in shapeStyles ) { return true; }; return false; }
72                 private function hasTextStyles():Boolean   { for (var a:String in textStyles  ) { return true; }; return false; }
73                 private function hasPointStyles():Boolean  { for (var a:String in pointStyles ) { return true; }; return false; }
74                 private function hasShieldStyles():Boolean { for (var a:String in shieldStyles) { return true; }; return false; }
75         }
76 }