int NativeScreen::handleImageData(MAHandle myImageData) { printf("handleImageData(%d)", myImageData); int resCode = -1; MAHandle hImage = maCreatePlaceholder(); int dataSize = maGetDataSize(myImageData); int createImageRes = maCreateImageFromData(hImage, myImageData, 0, dataSize); // Used for testing only. MAUtil::String info = "Ready.Size = " + MAUtil::integerToString(dataSize) + " res = " + MAUtil::integerToString(createImageRes); printf("\n%s\n", info.c_str()); if (createImageRes != RES_OK) { // If the Android VM gets an out of memory exception, get the image handle instead. maAlert("Memory Warning", " The image cannot be created. Try again", NULL, NULL, NULL); maWidgetSetProperty(mEventReturnTypeCheckbox, MAW_CHECK_BOX_CHECKED, "false"); maImagePickerOpen(); } else { char imgHandle[256]; sprintf(imgHandle, "%d", hImage); printf("imgHandle=%s---hImage=%d", imgHandle, hImage); // display the preview resCode = maWidgetSetProperty(mPreview, MAW_IMAGE_IMAGE, imgHandle); } // at this point the new selected image is either displayed or non-existent (out of memory) // the former displayed image (if exists) can be now safely deleted and reused if (mLastDisplayedImageHandle != -1) { maDestroyPlaceholder(mLastDisplayedImageHandle); } mLastDisplayedImageHandle = hImage; return resCode; }
/** * Handle widget click events. * @param widgetHandle The handle (reference) to the widget * that was clicked. */ void NativeScreen::widgetClicked(MAHandle widgetHandle) { // Exit the application when the exit button is clicked. if (widgetHandle == mExitButton) { TestMoblet::getInstance()->closeEvent(); } else if ( mButton == widgetHandle) { char checkboxBuffer[BUF_SIZE]; maWidgetGetProperty(mEventReturnTypeCheckbox, MAW_CHECK_BOX_CHECKED, checkboxBuffer, BUF_SIZE); MAUtil::String value = MAUtil::lowerString(checkboxBuffer); if ( strcmp(value.c_str(),"true") == 0 ) { maImagePickerOpenWithEventReturnType(MA_IMAGE_PICKER_EVENT_RETURN_TYPE_IMAGE_DATA); } else { maImagePickerOpen(); } } }
/** * Handle widget events. * @param event A MoSync event data structure. */ void NativeScreen::customEvent(const MAEvent& event) { // Get the information sent by the widget. MAWidgetEventData* widgetEventData = (MAWidgetEventData*) event.data; if ( event.type == EVENT_TYPE_IMAGE_PICKER) { if ( event.imagePickerState == 1 ) { // ready, get handle MAHandle myImage = event.imagePickerItem; char checkboxBuffer[BUF_SIZE]; maWidgetGetProperty(mEventReturnTypeCheckbox, MAW_CHECK_BOX_CHECKED, checkboxBuffer, BUF_SIZE); MAUtil::String value = MAUtil::lowerString(checkboxBuffer); if ( strcmp(value.c_str(),"true") == 0 ) { MAHandle hImage = maCreatePlaceholder(); int dataSize = maGetDataSize(event.imagePickerItem); int createImageRes= maCreateImageFromData(hImage, event.imagePickerItem, 0, dataSize); // Used for testing only. MAUtil::String info = "Ready.Size = " + MAUtil::integerToString(dataSize) + "res = " + MAUtil::integerToString(createImageRes) + ", mime type = " + MAUtil::integerToString(event.imagePickerEncodingType); if ( createImageRes != RES_OK ) { maAlert("Memory Warning", " The image cannot be created. Try again", NULL, NULL, NULL); maWidgetSetProperty(mEventReturnTypeCheckbox, MAW_CHECK_BOX_CHECKED, "false"); // If the Android VM gets an out of memory exception, get the image handle instead. maImagePickerOpen(); } else { char imgHandle[256]; sprintf(imgHandle, "%d", hImage); int resCode = maWidgetSetProperty(mPreview, MAW_IMAGE_IMAGE, imgHandle); } maDestroyPlaceholder(hImage); } else { char buffer[256]; sprintf(buffer, "%d", myImage); int resCode = maWidgetSetProperty(mPreview, MAW_IMAGE_IMAGE, buffer); } setLabelText(mLabel, "Preview is available"); } else { setLabelText(mLabel, "The user canceled the image selection"); } } // Check that the event was a click (touch) event. if (widgetEventData->eventType == MAW_EVENT_CLICKED) { // Handle the event emitted by the widget widgetClicked(widgetEventData->widgetHandle); } }