Merge branch 'master' of github.com:systemed/potlatch2
[potlatch2.git] / net / systemeD / potlatch2 / mapfeatures / EditorFactory.as
1 package net.systemeD.potlatch2.mapfeatures {
2
3     import net.systemeD.halcyon.connection.*;
4     import net.systemeD.potlatch2.mapfeatures.editors.*;
5     import flash.display.*;
6
7
8         /** Instantiates specific editing controls such as textboxes and speed limit selectors depending on the tags of a given entity. This class has child classes that instantiate the appropriate
9         * editors correctly.
10         */
11         public class EditorFactory {
12             private static const PRIORITY_HIGHEST:uint = 10;
13             private static const PRIORITY_HIGH:uint = 8;
14             private static const PRIORITY_NORMAL:uint = 5;
15             private static const PRIORITY_LOW:uint = 2;
16             private static const PRIORITY_LOWEST:uint = 0;
17
18         /** Returns a specific subclass of EditorFactory as appropriate for the type: "freetext", "checkbox", "choice", "slider", "number", "speed", "route", "turn". Otherwise null. */
19         public static function createFactory(inputType:String, inputXML:XML):EditorFactory {
20             switch ( inputType ) {
21
22             case "freetext": return new FreeTextEditorFactory(inputXML);
23             case "checkbox": return new CheckboxEditorFactory(inputXML);
24             case "choice": return new ChoiceEditorFactory(inputXML);
25             case "slider": return new SliderEditorFactory(inputXML);
26             case "number": return new NumberEditorFactory(inputXML);
27             case "speed": return new SpeedEditorFactory(inputXML);
28             case "route": return new RouteEditorFactory(inputXML);
29             case "turn": return new TurnRestrictionEditorFactory(inputXML);
30
31             }
32
33             return null;
34         }
35
36         /** Translates a priority string ("highest") to a const (PRIORITY_HIGHEST). */
37         public function getPriority(priority:String):uint {
38                         var base:uint=subcategory ? 0 : 11;
39             switch ( priority ) {
40             case "highest": return PRIORITY_HIGHEST+base;
41             case "high": return PRIORITY_HIGH+base;
42             case "normal": return PRIORITY_NORMAL+base;
43             case "low": return PRIORITY_LOW+base;
44             case "lowest": return PRIORITY_LOWEST+base;
45             default: return PRIORITY_NORMAL+base;
46             }
47         }
48
49         /** Default Presence behaviour: onTagMatch */
50         public var presence:Presence = Presence.getPresence("onTagMatch");
51
52         /** Default sorting: PRIORITY_NORMAL */
53         public var sortOrder:uint = PRIORITY_NORMAL;
54
55         /** Default category: "Standard" */
56         public var category:String = "Standard";
57
58         /** Optional subcategory (rendered as a collapsible panel) */
59         public var subcategory:String;
60
61         private var _name:String;
62         private var _description:String;
63
64         /** The default EditorFactory extracts name, description and category from the provided map features XML subtree. */
65         public function EditorFactory(inputXML:XML) {
66             _name = String(inputXML.@name);
67             _description = String(inputXML.@description);
68             category = String(inputXML.@category);
69             subcategory = String(inputXML.@subcategory);
70         }
71
72         /** Whether the tags on an entity correspond to those for the edit control. By default, returns true - must be overriden by more useful behaviour. */
73         public function areTagsMatching(entity:Entity):Boolean {
74             return true;
75         }
76
77         /** A subclass must provide an actual edit control. This returns null. */
78         public function createEditorInstance(entity:Entity):DisplayObject {
79             return null;
80         }
81
82         /** The name of the field/tag/edit control, as defined in map features XML. */
83         public function get name():String {
84             return _name;
85         }
86
87         /** The label given to the edited field, as defined in map features XML. */
88         public function get description():String {
89             return _description;
90         }
91
92     }
93
94 }
95
96