void AndroidMapDevice::setMapView(IMapView *mv) { RHO_MAP_TRACE("AndroidMapDevice: setMapView: start"); m_mapview = mv; if (m_mapview && m_pin_image.get()) { PIN_INFO pin_info; pin_info.x_offset = -10; pin_info.y_offset = -35; pin_info.click_rect_x = -10; pin_info.click_rect_y = -35; pin_info.click_rect_width = 20; pin_info.click_rect_height = 30; m_mapview->setPinImage(m_pin_image.get(), pin_info); PIN_INFO pin_info1 = PIN_INFO(); pin_info1.x_offset = 5; mv->setPinCalloutImage(m_pin_calloutimage.get(), pin_info1); mv->setPinCalloutLinkImage(m_pin_calloutlinkimage.get(), pin_info1); mv->setESRILogoImage(m_esriLogo_image.get()); mv->setGoogleLogoImage(m_googleLogo_image.get()); mv->set_file_caching_enable((int)ourIsCachingEnabled); } RHO_MAP_TRACE("AndroidMapDevice: setMapView: finish"); }
GoogleGeoCoding::GoogleGeoCoding() { CThreadQueue::setLogCategory(getLogCategory()); RHO_MAP_TRACE("GoogleGeoCoding: ctor start"); start(epNormal); RHO_MAP_TRACE("GoogleGeoCoding: ctor finish"); }
AndroidImage::AndroidImage(int *count, jobject *bitmap) :m_count(count), m_bitmap(bitmap) { RHO_MAP_TRACE("AndroidImage: private ctor start"); ++*m_count; init(jnienv()); RHO_MAP_TRACE("AndroidImage: private ctor finish"); }
RHO_GLOBAL void JNICALL Java_com_rhomobile_rhodes_mapview_MapView_setGoogleLogoImage (JNIEnv *env, jobject, jlong nativeDevice, jobject bitmap) { RHO_MAP_TRACE("Java_com_rhomobile_rhodes_mapview_MapView_setGoogleLogoImage: start"); rhomap::AndroidMapDevice *d = device(env, nativeDevice); d->setGoogleLogoImage(env, bitmap); RHO_MAP_TRACE("Java_com_rhomobile_rhodes_mapview_MapView_setGoogleLogoImage: finish"); }
void AndroidMapDevice::setGoogleLogoImage(JNIEnv *env, jobject bitmap) { RHO_MAP_TRACE("AndroidMapDevice: setGoogleLogoImage: start"); m_googleLogo_image.reset(new AndroidImage(bitmap)); IMapView *mv = mapView(); if (mv) { mv->setGoogleLogoImage(m_googleLogo_image.get()); } RHO_MAP_TRACE("AndroidMapDevice: setGoogleLogoImage: finish"); }
AndroidMapDevice::~AndroidMapDevice() { RHO_MAP_TRACE("AndroidMapDevice: dtor start"); rho_param_free(m_params); JNIEnv *env = jnienv(); if (m_jdevice) env->DeleteGlobalRef(m_jdevice); RHO_MAP_TRACE("AndroidMapDevice: dtor finish"); }
RHO_GLOBAL void JNICALL Java_com_rhomobile_rhodes_mapview_MapView_setZoom (JNIEnv *env, jobject, jlong nativeDevice, jint zoom) { RHO_MAP_TRACE("Java_com_rhomobile_rhodes_mapview_MapView_setZoom: start"); rhomap::IMapView *mv = mapview(env, nativeDevice); if (mv) mv->setZoom(zoom); RHO_MAP_TRACE("Java_com_rhomobile_rhodes_mapview_MapView_setZoom: finish"); }
RHO_GLOBAL void JNICALL Java_com_rhomobile_rhodes_mapview_MapView_move (JNIEnv *env, jobject, jlong nativeDevice, jint dx, jint dy) { RHO_MAP_TRACE("Java_com_rhomobile_rhodes_mapview_MapView_move: start"); rhomap::IMapView *mv = mapview(env, nativeDevice); if (mv) mv->move(dx, dy); RHO_MAP_TRACE("Java_com_rhomobile_rhodes_mapview_MapView_move: finish"); }
RHO_GLOBAL void JNICALL Java_com_rhomobile_rhodes_mapview_MapView_paint (JNIEnv *env, jobject, jlong nativeDevice, jobject canvas) { RHO_MAP_TRACE("Java_com_rhomobile_rhodes_mapview_MapView_paint: start"); rhomap::AndroidMapDevice *d = device(env, nativeDevice); if (d) d->paint(canvas); RHO_MAP_TRACE("Java_com_rhomobile_rhodes_mapview_MapView_paint: finish"); }
GoogleGeoCoding::GoogleGeoCoding() { #ifdef ENABLE_ANDROID_NET_REQUEST mNetRequestID = 0; #endif CThreadQueue::setLogCategory(getLogCategory()); RHO_MAP_TRACE("GoogleGeoCoding: ctor start"); start(epNormal); RHO_MAP_TRACE("GoogleGeoCoding: ctor finish"); }
AndroidImage::AndroidImage(jobject bitmap) :m_count(new int(1)), m_bitmap(new jobject(bitmap)) { RHO_MAP_TRACE("AndroidImage: ctor start"); JNIEnv *env = jnienv(); env->NewGlobalRef(bitmap); env->DeleteLocalRef(bitmap); init(env); RHO_MAP_TRACE("AndroidImage: ctor finish"); }
AndroidMapDevice::AndroidMapDevice(rho_param *p) :m_params(rho_param_dup(p)), m_mapview(NULL), m_jdevice(NULL) { RHO_MAP_TRACE("AndroidMapDevice: ctor start"); JNIEnv *env = jnienv(); jclass cls = getJNIClass(RHODES_JAVA_CLASS_MAPVIEW); if (!cls) return; jmethodID mid = getJNIClassStaticMethod(env, cls, "create", "(J)V"); if (!mid) return; env->CallStaticVoidMethod(cls, mid, (jlong)this); RHO_MAP_TRACE("AndroidMapDevice: ctor finish"); }
RHO_GLOBAL jint JNICALL Java_com_rhomobile_rhodes_mapview_MapView_zoom (JNIEnv *env, jobject, jlong nativeDevice) { RHO_MAP_TRACE("Java_com_rhomobile_rhodes_mapview_MapView_zoom: start"); jint ret = 0; rhomap::IMapView *mv = mapview(env, nativeDevice); if (mv) ret = mv->zoom(); RHO_MAP_TRACE("Java_com_rhomobile_rhodes_mapview_MapView_zoom: finish"); return ret; }
void AndroidMapDevice::setPinCalloutLinkImage(JNIEnv *env, jobject bitmap) { RHO_MAP_TRACE("AndroidMapDevice: setPinCalloutLinkImage: start"); m_pin_calloutlinkimage.reset(new AndroidImage(bitmap)); IMapView *mv = mapView(); if (mv) { PIN_INFO pin_info = PIN_INFO(); pin_info.x_offset = 5; mv->setPinCalloutLinkImage(m_pin_calloutlinkimage.get(), pin_info); } RHO_MAP_TRACE("AndroidMapDevice: setPinCalloutLinkImage: finish"); }
RHO_GLOBAL void JNICALL Java_com_rhomobile_rhodes_mapview_MapView_click (JNIEnv *env, jobject, jlong nativeDevice, jint x, jint y) { RHO_MAP_TRACE("Java_com_rhomobile_rhodes_mapview_MapView_click: start"); rhomap::IMapView *mv = mapview(env, nativeDevice); if (mv) { if (mv->handleClick(x, y) ) { // close mapview_close(); } } RHO_MAP_TRACE("Java_com_rhomobile_rhodes_mapview_MapView_click: finish"); }
RHO_GLOBAL void JNICALL Java_com_rhomobile_rhodes_mapview_MapView_setSize (JNIEnv *env, jobject, jobject jDevice, jlong nativeDevice, jint width, jint height) { RHO_MAP_TRACE("Java_com_rhomobile_rhodes_mapview_MapView_setSize: start"); rhomap::AndroidMapDevice *d = device(env, nativeDevice); rhomap::IMapView *mv = d->mapView(); if (!mv) { mv = rho_map_create(d->params(), d, width, height); d->setMapView(mv); d->attach(env, jDevice); } if (mv) mv->setSize(width, height); RHO_MAP_TRACE("Java_com_rhomobile_rhodes_mapview_MapView_setSize: finish"); }
GoogleGeoCoding::~GoogleGeoCoding() { RHO_MAP_TRACE("GoogleGeoCoding: dtor"); m_NetRequest.cancel(); CThreadQueue::stop(200); }
extern "C" void mapview_create(rho_param *p) { RHO_MAP_TRACE("MapView create executed"); RhoMapViewOpenViewCommand* command = new RhoMapViewOpenViewCommand(); ourMapViewDlg.mParams = rho_param_dup(p); RhoNativeViewUtil::executeInUIThread_WM(command); }
LRESULT CRhoMapViewDlg::OnDraw(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) { RHO_MAP_TRACE("WM_PAINT start"); PAINTSTRUCT ps; HDC hDC; hDC = ::BeginPaint(m_hWnd,&ps); CRect rect; ::GetClientRect(m_hWnd,&rect); HDC mMemoryDC = CreateCompatibleDC(hDC); if ( !m_hMemBitmap) m_hMemBitmap = CreateCompatibleBitmap(hDC, rect.Width(), rect.Height() ); HBITMAP hOldBitmap = (HBITMAP)SelectObject(mMemoryDC, m_hMemBitmap ); IDrawingContext* context = 0; #if defined(_WIN32_WCE) context = new WmDrawingContextImpl(mMemoryDC, rect.Width(), rect.Height()); #else #endif context->fillRect(0, 0, rect.Width(), rect.Height(), BACKGROUND_COLOR); // call MapView draw !!! if (ourMapView != NULL) { RHO_MAP_TRACE("execute MapView paint"); ourMapView->paint(context); } ::BitBlt( hDC, 0, 0, rect.Width(), rect.Height(), mMemoryDC, 0,0, SRCCOPY); ::SelectObject(mMemoryDC, hOldBitmap); DeleteDC(mMemoryDC); ::EndPaint(m_hWnd,&ps); RHO_MAP_TRACE("WM_PAINT finish"); return 0; }
AndroidMapDevice::~AndroidMapDevice() { RHO_MAP_TRACE("AndroidMapDevice: dtor start"); rho_param_free(m_params); JNIEnv *env = jnienv(); if (m_jdevice) { JNIEnv *env = jnienv(); jclass cls = getJNIClass(RHODES_JAVA_CLASS_MAPVIEW); if (!cls) return; jmethodID mid = getJNIClassMethod(env, cls, "destroyDevice", "()V"); if (!mid) return; env->CallVoidMethod(m_jdevice, mid); env->DeleteGlobalRef(m_jdevice); } RHO_MAP_TRACE("AndroidMapDevice: dtor finish"); }
void AndroidMapDevice::setPinImage(JNIEnv *env, jobject bitmap) { RHO_MAP_TRACE("AndroidMapDevice: setPinImage: start"); m_pin_image.reset(new AndroidImage(bitmap)); IMapView *mv = mapView(); if (mv) { PIN_INFO pin_info; pin_info.x_offset = -10; pin_info.y_offset = -35; pin_info.click_rect_x = -10; pin_info.click_rect_y = -35; pin_info.click_rect_width = 20; pin_info.click_rect_height = 30; mv->setPinImage(m_pin_image.get(), pin_info); } RHO_MAP_TRACE("AndroidMapDevice: setPinImage: finish"); }
AndroidImage::~AndroidImage() { RHO_MAP_TRACE("AndroidImage: dtor start"); if (--*m_count == 0) { JNIEnv *env = jnienv(); jclass cls = getJNIClass(RHODES_JAVA_CLASS_MAPVIEW); jmethodID mid = getJNIClassStaticMethod(env, cls, "destroyImage", "(Landroid/graphics/Bitmap;)V"); if (cls && mid) env->CallStaticVoidMethod(cls, mid, *m_bitmap); env->DeleteGlobalRef(*m_bitmap); delete m_bitmap; delete m_count; } RHO_MAP_TRACE("AndroidImage: dtor finish"); }
void AndroidMapDevice::paint(jobject canvas) { RHO_MAP_TRACE1("paint: m_jdevice=%p", m_jdevice); if (m_mapview) { std::auto_ptr<AndroidDrawingContext> context(new AndroidDrawingContext(m_jdevice, canvas)); m_mapview->paint(context.get()); } RHO_MAP_TRACE("paint done"); }
void AndroidMapDevice::setMapView(IMapView *mv) { RHO_MAP_TRACE("AndroidMapDevice: setMapView: start"); m_mapview = mv; if (m_mapview && m_pin_image.get()) { PIN_INFO pin_info; pin_info.x_offset = -10; pin_info.y_offset = -35; pin_info.click_rect_x = -10; pin_info.click_rect_y = -35; pin_info.click_rect_width = 20; pin_info.click_rect_height = 30; m_mapview->setPinImage(m_pin_image.get(), pin_info); PIN_INFO pin_info1 = {0}; pin_info1.x_offset = 5; mv->setPinCalloutImage(m_pin_calloutimage.get(), pin_info1); } RHO_MAP_TRACE("AndroidMapDevice: setMapView: finish"); }
void AndroidDrawingContext::drawText(int x, int y, int width, int height, String const &text, int color) { RHO_MAP_TRACE4("drawText: x=%d, y=%d, text=%s, color=%d", x, y, text.c_str(), color); JNIEnv *env = jnienv(); jclass cls = env->GetObjectClass(m_device); if (!cls) return; jmethodID mid = getJNIClassMethod(env, cls, "drawText", "(Landroid/graphics/Canvas;IIIILjava/lang/String;I)V"); if (!mid) return; env->CallVoidMethod(m_device, mid, m_canvas, x, y, width, height, rho_cast<jhstring>(text).get(), color); RHO_MAP_TRACE("drawText done"); }
void AndroidMapDevice::requestRedraw() { RHO_MAP_TRACE1("requestRedraw: m_jdevice=%p", m_jdevice); if (m_jdevice) { JNIEnv *env = jnienv(); jclass cls = getJNIClass(RHODES_JAVA_CLASS_MAPVIEW); if (!cls) return; jmethodID mid = getJNIClassMethod(env, cls, "redraw", "()V"); if (!mid) return; env->CallVoidMethod(m_jdevice, mid); } RHO_MAP_TRACE("requestRedraw done"); }
void AndroidDrawingContext::drawImage(int x, int y, IDrawingImage *image) { if (!image) return; RHO_MAP_TRACE3("drawImage: x=%d, y=%d, image=%p", x, y, image); jobject bitmap = ((AndroidImage*)image)->bitmap(); JNIEnv *env = jnienv(); jclass cls = env->GetObjectClass(m_device); if (!cls) return; jmethodID mid = getJNIClassMethod(env, cls, "drawImage", "(Landroid/graphics/Canvas;IILandroid/graphics/Bitmap;)V"); if (!mid) return; env->CallVoidMethod(m_device, mid, m_canvas, x, y, bitmap); RHO_MAP_TRACE("drawImage done"); }
void GoogleGeoCoding::processCommand(IQueueCommand *pCmd) { Command *cmd = (Command*)pCmd; GeoCodingCallback &cb = *(cmd->callback); String url = "http://maps.googleapis.com/maps/api/geocode/json?address="; url += net::URI::urlEncode(cmd->address); url += "&sensor=false"; RHO_MAP_TRACE1("GoogleGeoCoding: processCommand: url=%s", url.c_str()); void *data; size_t datasize; if (!fetchData(url, &data, &datasize)) { RAWLOG_ERROR1("Can not fetch data by url=%s", url.c_str()); return; } RHO_MAP_TRACE("GoogleGeoCoding: processCommand: Parse received json..."); double latitude, longitude; if (parse_json((const char *)data, &latitude, &longitude)) { RHO_MAP_TRACE("GoogleGeoCoding: processCommand: json parsed successfully"); cb.onSuccess(latitude, longitude); } else { RHO_MAP_TRACE("GoogleGeoCoding: processCommand: can't parse json"); cb.onError("Can not parse JSON response"); } /* char *error = 0; unsigned long json = rjson_tokener_parse((char const *)data, &error); if (!rho_ruby_is_NIL(json)) { RHO_MAP_TRACE("GoogleGeoCoding: processCommand: extract coordinates from json..."); unsigned long coords = rho_ruby_google_geocoding_get_coordinates(json); if (rho_ruby_is_NIL(coords)) { RHO_MAP_TRACE("GoogleGeoCoding: processCommand: rho_ruby_google_geocoding_get_coordinates return nil"); cb.onError("Cannot parse received JSON object"); } else { RHO_MAP_TRACE("GoogleGeoCoding: processCommand: rho_ruby_google_geocoding_get_coordinates return coordinates"); double latitude = rho_ruby_google_geocoding_get_latitude(coords); double longitude = rho_ruby_google_geocoding_get_longitude(coords); RHO_MAP_TRACE2("GoogleGeoCoding: processCommand: latitude=%lf, longitude=%lf", latitude, longitude); cb.onSuccess(latitude, longitude); } } else { RHO_MAP_TRACE("GoogleGeoCoding: processCommand: rjson_tokener_parse return nil"); cb.onError(error); } if (error) free (error); */ free(data); }
void AndroidMapDevice::attach(JNIEnv *env, jobject jDevice) { RHO_MAP_TRACE2("AndroidMapDevice: attach m_jdevice=%p, jDevice=%p", m_jdevice, jDevice); m_jdevice = env->NewGlobalRef(jDevice); RHO_MAP_TRACE("AndroidMapDevice: attach done"); }
void AndroidMapDevice::destroyImage(IDrawingImage *image) { RHO_MAP_TRACE1("destroyImage: image=%p", image); delete image; RHO_MAP_TRACE("destroyImage done"); }