⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 multiedit.c

📁 MCB2300_ucgui_LCD320240.rar LPC2368的uc/gui的移植
💻 C
📖 第 1 页 / 共 4 页
字号:
/*********************************************************************
*
*   	MULTIEDIT_CreateEx
*/
MULTIEDIT_HANDLE MULTIEDIT_CreateEx(int x0, int y0, int xsize, int ysize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id, int BufferSize, const char *pText)
{
	MULTIEDIT_HANDLE hObj;
	/* Create the window */
	WM_LOCK();
	if ((xsize == 0) && (ysize == 0) && (x0 == 0) && (y0 == 0))
	{
		GUI_RECT Rect;
		WM_GetClientRectEx(hParent, &Rect);
		xsize = Rect.x1 - Rect.x0 + 1;
		ysize = Rect.y1 - Rect.y0 + 1;
	}
	hObj = WM_CreateWindowAsChild(x0, y0, xsize, ysize, hParent, WinFlags, &_MULTIEDIT_Callback, sizeof(MULTIEDIT_OBJ) - sizeof(WM_Obj));
	if (hObj)
	{
		int i;
		MULTIEDIT_OBJ* pObj = MULTIEDIT_H2P(hObj);
		/* init widget specific variables */
		WIDGET__Init(&pObj->Widget, Id, WIDGET_STATE_FOCUSSABLE);
		/* init member variables */
		MULTIEDIT_INIT_ID(pObj);
		for (i = 0; i < NUM_DISP_MODES; i++)
		{
			pObj->aBkColor[i] = _aDefaultBkColor[i];
			pObj->aColor[i] = _aDefaultColor[i];
		}
		pObj->pFont = _pDefaultFont;
		pObj->Flags = ExFlags;
		pObj->CursorPosChar = 0;
		pObj->CursorPosByte = 0;
		pObj->HBorder = 1;
		pObj->MaxNumChars = 0;
		pObj->NumCharsPrompt = 0;
		pObj->BufferSize = 0;
		pObj->hText = 0;
		if (BufferSize > 0)
		{
			WM_HWIN hText;
			if ((hText = GUI_ALLOC_AllocZero(BufferSize)) != 0)
			{
				pObj->BufferSize = BufferSize;
				pObj->hText = hText;
			}
			else
			{
				GUI_DEBUG_ERROROUT("MULTIEDIT_CreateEx failed to alloc buffer");
				WM_DeleteWindow(hObj);
				hObj = 0;
			}
		}
		MULTIEDIT_SetText(hObj, pText);
		_ManageScrollers(hObj);
	}
	else
	{
		GUI_DEBUG_ERROROUT_IF(hObj == 0, "MULTIEDIT_CreateEx failed")
	}
	WM_UNLOCK();
	return hObj;
}

/*********************************************************************
*
*   	Exported routines:  Various methods
*
**********************************************************************
*/
/*********************************************************************
*
*   	MULTIEDIT_AddKey
*/
int MULTIEDIT_AddKey(MULTIEDIT_HANDLE hObj, U16 Key)
{
	int r = 0;
	if (hObj)
	{
		WM_LOCK();
		r = _AddKey(hObj, Key);
		WM_UNLOCK();
	}
	return r;
}

/*********************************************************************
*
*   	MULTIEDIT_SetText
*/
void MULTIEDIT_SetText(MULTIEDIT_HANDLE hObj, const char *pNew)
{
	if (hObj)
	{
		MULTIEDIT_OBJ* pObj;
		int NumCharsNew = 0, NumCharsOld = 0;
		int NumBytesNew = 0, NumBytesOld = 0;
		char* pText;
		WM_LOCK();
		pObj = MULTIEDIT_H2P(hObj);
		if (pObj->hText)
		{
			pText = (char *) GUI_ALLOC_h2p(pObj->hText);
			pText += GUI_UC__NumChars2NumBytes(pText, pObj->NumCharsPrompt);
			NumCharsOld = GUI__GetNumChars(pText);
			NumBytesOld = GUI_UC__NumChars2NumBytes(pText, NumCharsOld);
		}
		if (pNew)
		{
			NumCharsNew = GUI__GetNumChars(pNew);
			NumBytesNew = GUI_UC__NumChars2NumBytes(pNew, NumCharsNew);
		}
		if (_IsCharsAvailable(pObj, NumCharsNew - NumCharsOld))
		{
			if (_IsSpaceInBuffer(pObj, NumBytesNew - NumBytesOld))
			{
				pText = (char *) GUI_ALLOC_h2p(pObj->hText);
				pText += GUI_UC__NumChars2NumBytes(pText, pObj->NumCharsPrompt);
				if (pNew)
				{
					strcpy(pText, pNew);
				}
				else
				{
					*pText = 0;
				}
				_SetCursorPos(hObj, pObj, pObj->NumCharsPrompt);
				_InvalidateTextArea(hObj);
				_InvalidateNumChars(pObj);
				_InvalidateNumLines(pObj);
				_InvalidateTextSizeX(pObj);
			}
		}
		WM_UNLOCK();
	}
}

/*********************************************************************
*
*   	MULTIEDIT_GetText
*/
void MULTIEDIT_GetText(MULTIEDIT_HANDLE hObj, char *sDest, int MaxLen)
{
	if (hObj)
	{
		MULTIEDIT_OBJ* pObj;
		WM_LOCK();
		pObj = MULTIEDIT_H2P(hObj);
		if (pObj)
		{
			char* pText;
			int Len;
			pText = (char *) GUI_ALLOC_h2p(pObj->hText);
			pText += GUI_UC__NumChars2NumBytes(pText, pObj->NumCharsPrompt);
			Len = strlen(pText);
			if (Len > (MaxLen - 1))
			{
				Len = MaxLen - 1;
			}
			memcpy(sDest, pText, Len);
			*(sDest + Len) = 0;
		}
		WM_UNLOCK();
	}
}

/*********************************************************************
*
*   	MULTIEDIT_GetPrompt
*/
void MULTIEDIT_GetPrompt(MULTIEDIT_HANDLE hObj, char *sDest, int MaxLen)
{
	if (hObj)
	{
		MULTIEDIT_OBJ * pObj;
		WM_LOCK();
		pObj = MULTIEDIT_H2P(hObj);
		if (pObj)
		{
			char* sSource = (char *) GUI_ALLOC_h2p(pObj->hText);
			int Len = GUI_UC__NumChars2NumBytes(sSource, pObj->NumCharsPrompt);
			if (Len > (MaxLen - 1))
			{
				Len = MaxLen - 1;
			}
			memcpy(sDest, sSource, Len);
			*(sDest + Len) = 0;
		}
		WM_UNLOCK();
	}
}

/*********************************************************************
*
*   	MULTIEDIT_SetWrapWord
*/
void MULTIEDIT_SetWrapWord(MULTIEDIT_HANDLE hObj)
{
	_SetWrapMode(hObj, GUI_WRAPMODE_WORD);
}

/*********************************************************************
*
*   	MULTIEDIT_SetWrapChar
*/
void MULTIEDIT_SetWrapChar(MULTIEDIT_HANDLE hObj)
{
	_SetWrapMode(hObj, GUI_WRAPMODE_CHAR);
}

/*********************************************************************
*
*   	MULTIEDIT_SetWrapNone
*/
void MULTIEDIT_SetWrapNone(MULTIEDIT_HANDLE hObj)
{
	_SetWrapMode(hObj, GUI_WRAPMODE_NONE);
}

/*********************************************************************
*
*   	MULTIEDIT_SetInsertMode
*/
void MULTIEDIT_SetInsertMode(MULTIEDIT_HANDLE hObj, int OnOff)
{
	_SetFlag(hObj, OnOff, MULTIEDIT_SF_INSERT);
}

/*********************************************************************
*
*   	MULTIEDIT_SetReadOnly
*/
void MULTIEDIT_SetReadOnly(MULTIEDIT_HANDLE hObj, int OnOff)
{
	_SetFlag(hObj, OnOff, MULTIEDIT_SF_READONLY);
}

/*********************************************************************
*
*   	MULTIEDIT_SetPasswordMode
*/
void MULTIEDIT_SetPasswordMode(MULTIEDIT_HANDLE hObj, int OnOff)
{
	if (hObj)
	{
		MULTIEDIT_OBJ* pObj;
		WM_LOCK();
		pObj = MULTIEDIT_H2P(hObj);
		_SetFlag(hObj, OnOff, MULTIEDIT_SF_PASSWORD);
		_InvalidateCursorXY(pObj);
		_InvalidateNumLines(pObj);
		_InvalidateTextSizeX(pObj);
		WM_UNLOCK();
	}
}

/*********************************************************************
*
*   	MULTIEDIT_SetAutoScrollV
*/
void MULTIEDIT_SetAutoScrollV(MULTIEDIT_HANDLE hObj, int OnOff)
{
	_SetFlag(hObj, OnOff, MULTIEDIT_SF_AUTOSCROLLBAR_V);
}

/*********************************************************************
*
*   	MULTIEDIT_SetAutoScrollH
*/
void MULTIEDIT_SetAutoScrollH(MULTIEDIT_HANDLE hObj, int OnOff)
{
	_SetFlag(hObj, OnOff, MULTIEDIT_SF_AUTOSCROLLBAR_H);
}

/*********************************************************************
*
*   	MULTIEDIT_SetHBorder
*/
void MULTIEDIT_SetHBorder(MULTIEDIT_HANDLE hObj, unsigned HBorder)
{
	if (hObj)
	{
		MULTIEDIT_OBJ* pObj;
		WM_LOCK();
		pObj = MULTIEDIT_H2P(hObj);
		if ((unsigned) pObj->HBorder != HBorder)
		{
			pObj->HBorder = HBorder;
			_Invalidate(hObj);
		}
		WM_UNLOCK();
	}
}

/*********************************************************************
*
*   	MULTIEDIT_SetFont
*/
void MULTIEDIT_SetFont(MULTIEDIT_HANDLE hObj, const GUI_FONT GUI_UNI_PTR *pFont)
{
	if (hObj)
	{
		MULTIEDIT_OBJ* pObj;
		WM_LOCK();
		pObj = MULTIEDIT_H2P(hObj);
		if (pObj->pFont != pFont)
		{
			pObj->pFont = pFont;
			_InvalidateTextArea(hObj);
			_InvalidateCursorXY(pObj);
			_InvalidateNumLines(pObj);
			_InvalidateTextSizeX(pObj);
		}
		WM_UNLOCK();
	}
}

/*********************************************************************
*
*   	MULTIEDIT_SetBkColor
*/
void MULTIEDIT_SetBkColor(MULTIEDIT_HANDLE hObj, unsigned Index, GUI_COLOR color)
{
	if (hObj && (Index < NUM_DISP_MODES))
	{
		MULTIEDIT_OBJ* pObj;
		WM_LOCK();
		pObj = MULTIEDIT_H2P(hObj);
		pObj->aBkColor[Index] = color;
		_InvalidateTextArea(hObj);
		WM_UNLOCK();
	}
}

/*********************************************************************
*
*   	MULTIEDIT_SetCursorOffset
*/
void MULTIEDIT_SetCursorOffset(MULTIEDIT_HANDLE hObj, int Offset)
{
	if (hObj)
	{
		MULTIEDIT_OBJ* pObj;
		WM_LOCK();
		pObj = MULTIEDIT_H2P(hObj);
		_SetCursorPos(hObj, pObj, Offset);
		WM_Invalidate(hObj);
		WM_UNLOCK();
	}
}

/*********************************************************************
*
*   	MULTIEDIT_SetTextColor
*/
void MULTIEDIT_SetTextColor(MULTIEDIT_HANDLE hObj, unsigned Index, GUI_COLOR color)
{
	if (hObj && (Index < NUM_DISP_MODES))
	{
		MULTIEDIT_OBJ* pObj;
		WM_LOCK();
		pObj = MULTIEDIT_H2P(hObj);
		pObj->aColor[Index] = color;
		WM_Invalidate(hObj);
		WM_UNLOCK();
	}
}

/*********************************************************************
*
*   	MULTIEDIT_SetPrompt
*/
void MULTIEDIT_SetPrompt(MULTIEDIT_HANDLE hObj, const char *pPrompt)
{
	if (hObj)
	{
		MULTIEDIT_OBJ* pObj;
		int NumCharsNew = 0, NumCharsOld = 0;
		int NumBytesNew = 0, NumBytesOld = 0;
		char* pText;
		WM_LOCK();
		pObj = MULTIEDIT_H2P(hObj);
		if (pObj->hText)
		{
			pText = (char *) GUI_ALLOC_h2p(pObj->hText);
			NumCharsOld = pObj->NumCharsPrompt;
			NumBytesOld = GUI_UC__NumChars2NumBytes(pText, NumCharsOld);
		}
		if (pPrompt)
		{
			NumCharsNew = GUI__GetNumChars(pPrompt);
			NumBytesNew = GUI_UC__NumChars2NumBytes(pPrompt, NumCharsNew);
		}
		if (_IsCharsAvailable(pObj, NumCharsNew - NumCharsOld))
		{
			if (_IsSpaceInBuffer(pObj, NumBytesNew - NumBytesOld))
			{
				pText = (char *) GUI_ALLOC_h2p(pObj->hText);
				memmove(pText + NumBytesNew, pText + NumBytesOld, strlen(pText + NumBytesOld) + 1);
				if (pPrompt)
				{
					memcpy(pText, pPrompt, NumBytesNew);
				}
				pObj->NumCharsPrompt = NumCharsNew;
				_SetCursorPos(hObj, pObj, NumCharsNew);
				_InvalidateTextArea(hObj);
				_InvalidateNumChars(pObj);
				_InvalidateNumLines(pObj);
				_InvalidateTextSizeX(pObj);
			}
		}
		WM_UNLOCK();
	}
}

/*********************************************************************
*
*   	MULTIEDIT_SetBufferSize
*/
void MULTIEDIT_SetBufferSize(MULTIEDIT_HANDLE hObj, int BufferSize)
{
	if (hObj)
	{
		MULTIEDIT_OBJ* pObj;
		WM_HMEM hText;
		WM_LOCK();
		pObj = MULTIEDIT_H2P(hObj);
		if ((hText = GUI_ALLOC_AllocZero(BufferSize)) == 0)
		{
			GUI_DEBUG_ERROROUT("MULTIEDIT_SetBufferSize failed to alloc buffer");
		}
		else
		{
			GUI_ALLOC_FreePtr(&pObj->hText);
			pObj->hText = hText;
			pObj->BufferSize = BufferSize;
			pObj->NumCharsPrompt = 0;
			_SetCursorPos(hObj, pObj, 0);
			_InvalidateNumChars(pObj);
			_InvalidateCursorXY(pObj);
			_InvalidateNumLines(pObj);
			_InvalidateTextSizeX(pObj);
		}
		_InvalidateTextArea(hObj);
		WM_UNLOCK();
	}
}

/*********************************************************************
*
*   	MULTIEDIT_SetMaxNumChars
*/
void MULTIEDIT_SetMaxNumChars(MULTIEDIT_HANDLE hObj, unsigned MaxNumChars)
{
	if (hObj)
	{
		MULTIEDIT_OBJ* pObj;
		WM_LOCK();
		pObj = MULTIEDIT_H2P(hObj);
		pObj->MaxNumChars = MaxNumChars;
		if (MaxNumChars < (unsigned) pObj->NumCharsPrompt)
		{
			pObj->NumCharsPrompt = MaxNumChars;
		}
		if (pObj->hText && MaxNumChars)
		{
			char* pText;
			int Offset;
			pText = (char *) GUI_ALLOC_h2p(pObj->hText);
			Offset = GUI_UC__NumChars2NumBytes(pText, MaxNumChars);
			if (Offset < pObj->BufferSize)
			{
				pText += Offset;
				*pText = 0;
				_SetCursorPos(hObj, pObj, Offset);
				_InvalidateTextArea(hObj);
				_InvalidateNumChars(pObj);
			}
		}
		WM_UNLOCK();
	}
}

/*********************************************************************
*
*   	MULTIEDIT_GetTextSize
*
* Purpose:
*   Returns the number of bytes required to store the text.
*   It is typically used when allocating a buffer to pass to
*   MULTIEDIT_GetText().
*/
int MULTIEDIT_GetTextSize(MULTIEDIT_HANDLE hObj)
{
	int r = 0;
	if (hObj)
	{
		MULTIEDIT_OBJ* pObj;
		WM_LOCK();
		pObj = MULTIEDIT_H2P(hObj);
		if (pObj->hText)
		{
			const char* s;
			s = (const char *) GUI_ALLOC_h2p(pObj->hText);
			s += GUI_UC__NumChars2NumBytes(s, pObj->NumCharsPrompt);
			r = 1 + strlen(s);
		}
		WM_UNLOCK();
	}
	return r;
}


#else /* avoid empty object files */

void MULTIEDIT_C(void);
void MULTIEDIT_C(void)
{
}

#endif  /* #if GUI_WINSUPPORT */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -