[libchamplain] Emit a signal if MapDataSource has changed
- From: Pierre-Luc Beaudoin <plbeaudoin src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [libchamplain] Emit a signal if MapDataSource has changed
- Date: Sun, 24 Jan 2010 20:07:59 +0000 (UTC)
commit a6a62450de219e18eea83bda58ed605096af183d
Author: Simon Wenner <simon wenner ch>
Date: Fri Jun 26 12:12:59 2009 +0200
Emit a signal if MapDataSource has changed
champlain/champlain-local-map-data-source.c | 3 +++
champlain/champlain-map-data-source.c | 23 +++++++++++++++++++++++
champlain/champlain-memphis-map-source.c | 26 ++++++++++++++++++++++++--
3 files changed, 50 insertions(+), 2 deletions(-)
---
diff --git a/champlain/champlain-local-map-data-source.c b/champlain/champlain-local-map-data-source.c
index 9f8c6ed..146f1a4 100644
--- a/champlain/champlain-local-map-data-source.c
+++ b/champlain/champlain-local-map-data-source.c
@@ -119,4 +119,7 @@ champlain_local_map_data_source_load_map_data (ChamplainLocalMapDataSource *self
ChamplainLocalMapDataSourcePrivate *priv = GET_PRIVATE(self);
memphis_map_load_from_file (priv->map, map_path);
+
+ g_signal_emit_by_name (CHAMPLAIN_MAP_DATA_SOURCE (self),
+ "map-data-changed", NULL);
}
diff --git a/champlain/champlain-map-data-source.c b/champlain/champlain-map-data-source.c
index 1210aef..bb78462 100644
--- a/champlain/champlain-map-data-source.c
+++ b/champlain/champlain-map-data-source.c
@@ -28,6 +28,12 @@ G_DEFINE_TYPE (ChamplainMapDataSource, champlain_map_data_source, G_TYPE_OBJECT)
enum
{
+ MAP_DATA_CHANGED,
+ LAST_SIGNAL
+};
+
+enum
+{
PROP_0,
PROP_ID,
PROP_NAME,
@@ -37,6 +43,8 @@ enum
PROP_MAX_ZOOM_LEVEL
};
+static guint signals[LAST_SIGNAL] = { 0, };
+
typedef struct _ChamplainMapDataSourcePrivate ChamplainMapDataSourcePrivate;
struct _ChamplainMapDataSourcePrivate {
@@ -101,6 +109,21 @@ champlain_map_data_source_class_init (ChamplainMapDataSourceClass *klass)
object_class->finalize = champlain_map_data_source_finalize;
klass->get_map_data = champlain_map_data_source_real_get_map_data;
+
+ /**
+ * ChamplainView::map-data-changed:
+ * @map_data_source: the #ChamplainMapDataSource that received the signal
+ *
+ * The ::map-data-changed signal is emitted when the map data was
+ * replaced or modified
+ *
+ * Since: 0.6
+ */
+ signals[MAP_DATA_CHANGED] =
+ g_signal_new ("map-data-changed", G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_LAST, 0, NULL, NULL,
+ g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE,
+ 1, CHAMPLAIN_TYPE_MAP_DATA_SOURCE);
}
static void
diff --git a/champlain/champlain-memphis-map-source.c b/champlain/champlain-memphis-map-source.c
index 722cd09..0efa3f7 100644
--- a/champlain/champlain-memphis-map-source.c
+++ b/champlain/champlain-memphis-map-source.c
@@ -25,7 +25,6 @@
#include "champlain-cache.h"
#include "champlain-defines.h"
#include "champlain-enum-types.h"
-#include "champlain-marshal.h"
#include "champlain-private.h"
#include <clutter-cairo.h>
@@ -119,6 +118,26 @@ champlain_memphis_map_source_finalize (GObject *object)
}
static void
+map_data_changed_cb (ChamplainMapDataSource *map_data_source,
+ GParamSpec *arg1,
+ ChamplainMemphisMapSource *map_source)
+{
+ g_assert (CHAMPLAIN_IS_MAP_DATA_SOURCE (map_data_source) &&
+ CHAMPLAIN_IS_MEMPHIS_MAP_SOURCE (map_source));
+
+ MemphisMap *map;
+ ChamplainMemphisMapSourcePrivate *priv = GET_PRIVATE(map_source);
+
+ map = champlain_map_data_source_get_map_data (map_data_source);
+
+ DEBUG ("DataSource has been changed!");
+
+ g_static_rw_lock_writer_lock (&MemphisLock);
+ memphis_renderer_set_map (priv->renderer, map);
+ g_static_rw_lock_writer_unlock (&MemphisLock);
+}
+
+static void
fill_tile (ChamplainMapSource *map_source, ChamplainTile *tile)
{
ChamplainMemphisMapSourcePrivate *priv = GET_PRIVATE(map_source);
@@ -291,10 +310,13 @@ champlain_memphis_map_source_new_full (ChamplainMapSourceDesc *desc,
priv->thpool = g_thread_pool_new (memphis_worker_thread, priv->renderer,
MAX_THREADS, FALSE, NULL);
+ g_signal_connect (priv->map_data_source, "map-data-changed",
+ G_CALLBACK (map_data_changed_cb), source);
+
return source;
}
-void
+void // TODO: this is a dangerous function! Remove it?
champlain_memphis_map_source_set_tile_size (ChamplainMemphisMapSource *self,
guint size)
{
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]