예제 #1
0
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);
   }
}
예제 #2
0
	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__);
	}