NL:Potlatch/Development overview/Client overview
Dit is niet een complete referentie naar alles binnen de Potlatch SWF, maar het zou een aardig idee moeten geven hoe dingen in elkaar zitten. De code is tevens redelijk van commentaar voorzien.
- potlatch.as is het hoofd code bestand, en het meeste wat je nodig hebt zit hierin
- gps.as laadt and verwerkt GPS tracks
- properties.as is de tag-editing code (ook wel genoemd eigenschappen, properties of attributen)
- tiles.as zijn de achtergrond tegels (in ontwikkeling, momenteel nog niet in gebruik)
- ui.as is een set van standard code voor pull-down menu's, dialoog boxen en checkboxen
Movieclips
De belangrijkste movieclip is te adresseren als _root. Hierbinnen zijn verscheidene movie clips. De hoofd clip is _root.map, die de eigenlijke kaart is. Alle ways en POIs zijn hier subclips van, dus wanneer je de kaart versleept gaan de ways mee.
- _root.map.ways - way polylines
- _root.map.pois - POI nodes
- _root.map.gpx - GPX track
- _root.map.areas - area fills en way casing
Deze hebben verdere clips in zich genest, dus:
- _root.map.ways.1872 is de way met id 1872
- _root.map.pois.29876 is de poi met id 29876
In ActionScript kunnen je eigen objecten movieclips aanvullen of uitbreiden. Dus hoewel _root.map een eenvoudige movieclip is, is _root.map.ways.1872 een object van het type OSMWay, die movieclip functionaliteit heeft en een flinke hoeveelheid eigen methoden: zie beneden voor meer. (Echter, omdat elke movieclip een overhead heeft van ongeveer 1k is het de moeite waard jezelf een beetje in te houden, en niet (te) veel aan te maken!)
Andere clips omvatten:
- _root.yahoo - Yahoo layer
- _root.properties - tag editing venster (nogmaals, plenty subclips)
- _root.i_scissors, _root.i_gps etc. - knoppen
Het is aan te raden dat je niet rommelt met _root.masksquare en dergelijke - Flash masking (om te voorkomen dat de kaart overlapt met het tag paneel) is een behoorlijk obscure kunst.
Enige Potlatch basiszaken
- Alle co-ordinaten in ways, POIs etc. worden 'projected' opgeslagen.
- Laat de manier waarop andere OSM toepassingen met nodes omgaan je niet in verwarring brengen: Potlatch werkt niet zo. Een punt in een polyline is een ding; een stand-alone point of interest (POI) is een andere. Zelfs wanneer ze beide als node worden opgeslagen in de database, dan nog zijn het in Potlatch twee compleet andere objecten.
Klassen voor nodes en ways
OSMWay
Een way.
Eigenschappen
- this._name - way id
- this.path - array of points
- this.attr - totaal van keys en values
- this.clean - boolean: aangepast sinds laatste upload?
- this.uploading - boolean: momenteel geuploaded naar de server? (zo ja, probeer dit dan niet nog eens)
- this.locked - boolean: gelocked? (zo ja, niet uploaden)
- this.oldversion - vorig versie numner wanneer vanuit de history gehaald
- this.mergedways - lijst van alle ways die gekoppeld met deze worden
- this.xmin, this.xmax, this.ymin, this.ymax - bounding box van way
Methoden
- Server communication: this.load, this.loadFromDeleted, this.remove, this.upload, this.reload
- Drawing: this.redraw, this.select, this.highlight, this.highlightPoints
- Geometry: this.splitWay, this.mergeWay, this.addPointFrom, this.reverseWay
- Click event handlers: this.onRollOver, this.onRollOut, this.onPress
- Miscellaneous:
- this.clearPOIs - verwijderd alle POIs van de kaart waar die node is in deze way
- this.direction - update richting pictogram gebaseerd op de orientatie van de way
- this.deleteMergedWays - verwijderd elke way van de server die gekoppeld is aan deze way
AnchorPoint
Een AnchorPoint is de rode node die je ziet wanneer je een way hebt geselekteerd.
Properties
- this._name - positie in way (0 en verder)
- this.way - id van de bijbehorende way (zou hetzelfde moeten zijn als _root.wayselected)
- this.node - id van de node
Methods
- Click event afhandelaars: this.onRollOver, this.onPress
- Slepen afhandeling: this.beginDrag, this.trackDrag, this.endDrag
- Elastiek tekenen: this.startElastic, this.trackElastic, this.endElastic
- zie ook restartElastic(), dat het elastiekje opnieuw start wanner deze net beindigd is
AnchorHint
Een AnchorHint is de blauwe node die je ziet wanneer je met de muis over een andere way gaat (tijdens tekenen). De eigenschappen zijn hetzelfde als van een AnchorPoint. De enigste methodes zijn de click event afhandelaars this.onRollOver, this.onRollOut, this.onPress.
POI
Een POI is een stand-alone node die niet onderdeel van een way is.
Eigenschappen
- this._name - node id
- this._x, this._y - positie
- this.attr - totaal van keys and values
- this.clean - boolean: gewijzigd sinds laatste upload?
- this.uploading - boolean: wordt momenteel geupload naar de server? (zo ja, probeer dit niet overnieuw)
- this.locked - boolean: gelocked? (zo ja, niet uploaden)
Methods
- Server communicatie: this.remove, this.reload, this.upload
- Click event afhandelaars: this.onRollOver, this.onPress
- Afhandeling van slepen: this.beginDrag, this.trackDrag, this.endDrag
- this.select
Klassen voor key/value editing
KeyValue
AutoMenu
Ondersteunende funkties
Klassen voor generieke UI
UICheckbox
UIMenu
Ondersteunende funkties
Algemeen ondersteunende funkties
Server communicatie
GPS funkties
Geschiedenis
Toetsen
Gebruikers interface
Co-ordinaten conversie
(nog af te maken)
Globale variabelen
Potlatch maakt intensief gebruik van globale variabelen die bovenin potlatch.as worden geinitializeerd. Ze zijn allen van commentaar voorzien, de meeste gebruikte zijn:
- _root.wayselected - huidige geselecteerd way id (or 0)
- _root.pointselected - huidige geselecteerde point binnen een way (or -2). Merk op dat dit de positie in de way betreft, (0 voor de eerste, etc.), niet het id van de way.
- _root.poiselected - huidige geselecteerde POI (or 0)
- _root.drawpoint - is de point die getekend wordt (met elastieken lijntje)? -1 nr, 0+ positie binnen way (net als bij pointselected)
- _root.newwayid, _root.newnodeid, _root.newpoiid - te gebruiken negatieve IDs voor volgende nieuw aan te maken object
- _root.scale - current map scale
Je zult veel verwijzingen tegenkomen in de code naar _root.ws. Dit is een referentie naar _root.map.ways[_root.wayselected], m.a.w. de huidig geselecteerde way.
Debuggen
De beste manier om te debuggen is te compileren met de --trace optie. Dit opent een statisch tekst venster. Je kunt dan debug informatie schrijven naar dit venster met _root.chat.text="Debug stuff".