From 509376f47390043fd7efe5040481bf0c9158f4d7 Mon Sep 17 00:00:00 2001 From: Georg Lukas Date: Tue, 26 Oct 2010 22:55:19 +0200 Subject: [PATCH] implement preliminary position display --- res/drawable/cross.png | Bin 0 -> 246 bytes src/MapAct.scala | 68 ++++++++++++++++++++++++++++++++++++++++- 2 files changed, 67 insertions(+), 1 deletion(-) create mode 100644 res/drawable/cross.png diff --git a/res/drawable/cross.png b/res/drawable/cross.png new file mode 100644 index 0000000000000000000000000000000000000000..7bd154df8ab19e63dd73387c05bda99bf76dd41a GIT binary patch literal 246 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85p>QL70(Y)*K0-AbW|YuPgg4E`DJa*^(8SuYf|5C9V-A&iT2y zsd*&~&PAz-C8;S2<(VZJ3hti10pX2&;y^`#o-U3d7N?(14&*vuz~StC{@=On+Dq*- z6Pq{k3$pP(@$M8_e1-EsgSHf3yy2?oe-R8Hj2>J*VR9$qWcUkr-%I<>Wt?p=-aDyv haj}3h>lV8;YQ`mo?B<_;^8pQK@O1TaS?83{1OOc^PCNhr literal 0 HcmV?d00001 diff --git a/src/MapAct.scala b/src/MapAct.scala index 0a5bf77..b818d7a 100644 --- a/src/MapAct.scala +++ b/src/MapAct.scala @@ -1,18 +1,84 @@ package de.duenndns.aprsdroid +import _root_.android.graphics.drawable.Drawable import _root_.android.os.Bundle -import _root_.com.google.android.maps.{MapActivity, MapView} +import _root_.android.util.Log +import _root_.com.google.android.maps._ class MapAct extends MapActivity { val TAG = "MapAct" lazy val mapview = findViewById(R.id.mapview).asInstanceOf[MapView] + lazy val pin = this.getResources().getDrawable(R.drawable.cross) + lazy val staoverlay = new StationOverlay(pin) override def onCreate(savedInstanceState: Bundle) { super.onCreate(savedInstanceState) setContentView(R.layout.mapview) mapview.setBuiltInZoomControls(true) + val w = pin.getIntrinsicWidth() + val h = pin.getIntrinsicHeight() + pin.setBounds(-w/2, -h/2, w/2, h/2) + staoverlay.loadDb(StorageDatabase.open(this)) + mapview.getOverlays().add(staoverlay) + } override def isRouteDisplayed() = false } + +class Station(point : GeoPoint, call : String, message : String) + extends OverlayItem(point, call, message) { + + +} + +class StationOverlay(pin : Drawable) extends ItemizedOverlay[Station](pin) { + + //lazy val calls = new scala.collection.mutable.HashMap[String, Boolean]() + lazy val stations = new java.util.ArrayList[Station]() + + override def size() = stations.size() + override def createItem(idx : Int) : Station = stations.get(idx) + + override def draw(c : Canvas, m : MapView, shadow : Boolean) = { + populate() + val p = new Point() + for (s <- stations) { + m.getProjection().toPixels(s, p) + c.drawText(s.) + } + } + + def loadDb(db : StorageDatabase) { + val c = db.getPosts("TYPE = 0 OR TYPE = 3", null, "100") + c.moveToFirst() + while (!c.isAfterLast()) { + val msgidx = c.getColumnIndexOrThrow(StorageDatabase.Post.MESSAGE) + val message = c.getString(msgidx) + addStation(message) + c.moveToNext() + } + c.close() + Log.d("StationOverlay", "total %d items".format(size())) + } + + def addStation(sta : Station) { + //if (calls.contains(sta.getTitle())) + // return + //calls.add(sta.getTitle(), true) + stations.add(sta) + populate() + } + + def addStation(post : String) { + try { + val (call, lat, lon, sym, comment) = AprsPacket.parseReport(post) + Log.d("StationOverlay", "got %s(%d, %d)%s -> %s".format(call, lat, lon, sym, comment)) + addStation(new Station(new GeoPoint(lat, lon), call, comment)) + } catch { + case e : Exception => + Log.d("StationOverlay", "bad " + post) + } + } +}