예제 #1
0
파일: mapview.cpp 프로젝트: Takonis/rhodes
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");
}
예제 #2
0
GoogleGeoCoding::GoogleGeoCoding()
{
    CThreadQueue::setLogCategory(getLogCategory());
    RHO_MAP_TRACE("GoogleGeoCoding: ctor start");
    start(epNormal);
    RHO_MAP_TRACE("GoogleGeoCoding: ctor finish");
}
예제 #3
0
파일: mapview.cpp 프로젝트: Takonis/rhodes
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");
}
예제 #4
0
파일: mapview.cpp 프로젝트: Takonis/rhodes
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");
}
예제 #5
0
파일: mapview.cpp 프로젝트: Takonis/rhodes
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");
}
예제 #6
0
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");
}
예제 #7
0
파일: mapview.cpp 프로젝트: Takonis/rhodes
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");
}
예제 #8
0
파일: mapview.cpp 프로젝트: Takonis/rhodes
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");
}
예제 #9
0
파일: mapview.cpp 프로젝트: Takonis/rhodes
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");
}
예제 #10
0
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");
}
예제 #11
0
파일: mapview.cpp 프로젝트: Takonis/rhodes
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");
}
예제 #12
0
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");
}
예제 #13
0
파일: mapview.cpp 프로젝트: Takonis/rhodes
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;
}
예제 #14
0
파일: mapview.cpp 프로젝트: Takonis/rhodes
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");
}
예제 #15
0
파일: mapview.cpp 프로젝트: Takonis/rhodes
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");
}
예제 #16
0
파일: mapview.cpp 프로젝트: Takonis/rhodes
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");
}
예제 #17
0
GoogleGeoCoding::~GoogleGeoCoding()
{
    RHO_MAP_TRACE("GoogleGeoCoding: dtor");

    m_NetRequest.cancel();
    CThreadQueue::stop(200);
}
예제 #18
0
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);
}
예제 #19
0
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;
}
예제 #20
0
파일: mapview.cpp 프로젝트: Takonis/rhodes
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");
}
예제 #21
0
파일: mapview.cpp 프로젝트: Takonis/rhodes
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");
}
예제 #22
0
파일: mapview.cpp 프로젝트: Takonis/rhodes
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");
}
예제 #23
0
파일: mapview.cpp 프로젝트: Takonis/rhodes
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");
}
예제 #24
0
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");
}
예제 #25
0
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");
}
예제 #26
0
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");
}
예제 #27
0
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");
}
예제 #28
0
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);
}
예제 #29
0
파일: mapview.cpp 프로젝트: Takonis/rhodes
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");
}
예제 #30
0
파일: mapview.cpp 프로젝트: Takonis/rhodes
void AndroidMapDevice::destroyImage(IDrawingImage *image)
{
    RHO_MAP_TRACE1("destroyImage: image=%p", image);
    delete image;
    RHO_MAP_TRACE("destroyImage done");
}