SOM_Scope void SOMLINK ShapePartHandleColorChange(ShapePart *somSelf, Environment *ev, ODFrame *frame) { ShapePartData *somThis = ShapePartGetData(somSelf); ShapePartMethodDebug("ShapePart","ShapePartHandleColorChange"); COLORREF oldColor = _fBackgroundColor; #if defined(_PLATFORM_WIN32_) ODWindowState* WinStat = _fSession->GetWindowState(ev); TempODWindow Window = WinStat->AcquireActiveWindow(ev); HWND hwnd = Window->GetPlatformWindow(ev); COLORREF clrCustom[16]; int fColor; CHOOSECOLOR colorstruct; // set up structure to pass to color dialog routine memset(&colorstruct, 0, sizeof(colorstruct)); colorstruct.lStructSize = sizeof(colorstruct); colorstruct.hwndOwner = hwnd; colorstruct.rgbResult = RGB(0, 0, 0); colorstruct.Flags = CC_RGBINIT; for (fColor=0; fColor<16; fColor++) clrCustom[fColor] = RGB(255, 255, 255); colorstruct.lpCustColors = clrCustom; if (ChooseColor(&colorstruct)) _fBackgroundColor = colorstruct.rgbResult; #elif defined (_PLATFORM_OS2_) CHAR Error[256] = ""; HMODULE hmod; int rc; SHORT NewColors[3] = {0, 0, 0}; ODWindowState* WinStat = _fSession->GetWindowState(ev); TempODWindow Window = WinStat->AcquireActiveWindow(ev); HWND hwnd = Window->GetPlatformWindow(ev); DosLoadModule( Error, sizeof(Error), kShapePartDLLName, &hmod ); NewColors[RED] = (SHORT) ((_fBackgroundColor / 65536L) & 0x000000FF); NewColors[GREEN]= (SHORT) ((_fBackgroundColor / 256L) & 0x000000FF); NewColors[BLUE] = (SHORT) (_fBackgroundColor & 0x000000FF); // call procedures for bringing up rc file and user changing colors rc = ColorWindow(hmod, hwnd, NewColors); _fBackgroundColor = NewColors[BLUE] + (256L * (LONG) NewColors[GREEN]) + (65536L * (LONG) NewColors[RED]); #elif defined (_PLATFORM_UNIX_) // TBD #endif // now that we have changed color, invalidate the frame and force redraw if (oldColor != _fBackgroundColor) { somSelf->GetStorageUnit(ev)->GetDraft(ev)->SetChangedFromPrev(ev); somSelf->InvalidateAllFrames(ev); // register with undo manager ODIText *undoActionName = CreateITextCString (0, 0, kShapePartUndoBGColor); ODIText *redoActionName = CreateITextCString (0, 0, kShapePartRedoBGColor); ShapePartUndoRec undoData; undoData.undoAction = UNDO_BGCOLOR; undoData.oldColor = oldColor; undoData.newColor = _fBackgroundColor; ODActionData *undoer = (ODActionData *) CreateByteArray (&undoData, sizeof (ShapePartUndoRec)); _fSession->GetUndo(ev)->AddActionToHistory (ev, somSelf, undoer, kODSingleAction, (ODName *)undoActionName, (ODName *)redoActionName); DisposeIText (undoActionName); DisposeIText (redoActionName); DisposeByteArray (undoer); } }
void cpp2Java(JNIEnv * env, const J_NVItem & item, jobject & jObj) const { // LOGI("Enter %s \n",__FUNCTION__); jobject jvalue = NULL; //处理值 switch(item.value.vt) { case JVT_EMPTY: break; case JVT_U8: case JVT_S8: jvalue = CreateIntegerObj(env, 0xFF & item.value.s8Val); env->SetIntField(jObj, m_Type_id, JVT_U32); break; case JVT_U16: case JVT_S16: jvalue = CreateIntegerObj(env, 0xFFFF & item.value.s16Val); env->SetIntField(jObj, m_Type_id, JVT_U32); break; case JVT_U32: case JVT_S32: jvalue = CreateIntegerObj(env, item.value.s32Val); env->SetIntField(jObj, m_Type_id, JVT_U32); break; case JVT_BOOL: jvalue = CreateIntegerObj(env, item.value.bVal); env->SetIntField(jObj, m_Type_id, JVT_U32); break; case JVT_FLOAT: break; case JVT_DOUBLE: break; case JVT_STRING: { env->SetIntField(jObj, m_Type_id, JVT_STRING); // jstring jstr = env->NewStringUTF(item.value.pStrVal->strVal); jstring jstr = CreateJstringFromGB2312(env, item.value.pStrVal->strVal); jvalue = jstr; } break; case JVT_BINARY: { // LOGI("%s Binary size %d\n",__FUNCTION__, item.value.pBinary->uSize); jvalue = CreateByteArray(env, (char*)item.value.pBinary->pByte, item.value.pBinary->uSize); env->SetIntField(jObj, m_Type_id, JVT_BINARY); } break; default: break; } if(jvalue != NULL) { env->SetObjectField(jObj, m_Data_id, jvalue); env->DeleteLocalRef(jvalue); } //处理名字 jstring jname = env->NewStringUTF(item.name.c_str()); env->SetObjectField(jObj, m_Name_id, jname); env->DeleteLocalRef(jname); //因有多个子节点需单独处理. // LOGI("Leave %s \n",__FUNCTION__); }