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

📄 chinesemate.c

📁 palm os 上的中文伴侣源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
								}
							}
						}
					}
					MemHandleUnlock(fldNameTextHandle);
					FldSetTextHandle(fldNamePtr, fldNameTextHandle);
					FldDrawField(fldNamePtr);
					if (nameOffset > 0)
					{
						FldSetSelection(fldNamePtr, 0, 1);
						curSel = 0;
						curSelEnd = 1;
					}
				}
				//close database
				DmCloseDatabase(dbRef);
				DmCloseDatabase(pydbRef);
			}
			else if (event.data.keyDown.chr == 0x0008)
			{
				curChar = 0;
				ExitEventLoop = true;
			}
		}
		else
		{
			 SysHandleEvent(&event);
		}
	}while (event.eType != appStopEvent && ! ExitEventLoop);
	
	fldKeyTextHandle = FldGetTextHandle(fldKeyPtr);
	FldSetTextHandle(fldKeyPtr, NULL);
	MemHandleFree(fldKeyTextHandle);
	fldNameTextHandle = FldGetTextHandle(fldNamePtr);
	FldSetTextHandle(fldNamePtr, NULL);
	MemHandleFree(fldNameTextHandle);
	
	return curChar;
}

static UInt16 fiEventLoop(Char * str)
{
	EventType		event;
	UInt16			error;
	FormType		* frmP;
	FieldType		* fldPuncPtr;
	FieldType		* fldDateTimePtr;
	ListType		* lstQuickTextPtr;
	//ControlType		* labQuickTextTipPtr;
	MemHandle		fldTextHandle = 0;
	MemHandle		lstArrayHandle = 0;
	Char			** lstItemStr;
	Char			* fldPuncTextPtr;
	Char			* fldDateTimeTextPtr;
	Char			* DateBuf;
	Char			* TimeBuf;
	Char			* SecondBuf;
	UInt8			curObject;
	UInt32			curSysTime;
	DateTimeType	curDateTime;
	Boolean			keyHandled;
	UInt16			curSel = 0;
	UInt16			curSelEnd = 2;
	Boolean			QuickTextExist = true;
	DmOpenRef		* dbRef;
	UInt16			RecCount = 0;
	UInt16			lstBufSize;
	MemHandle		recH;
	UInt16			recSize;
	Char			* recP;
	Char			* lstBuf = 0;
	UInt16			i;
	UInt16			j;
	UInt16			lstItem = 0;
	Boolean			exit = false;

	//Init
	frmP = FrmGetActiveForm();
	fldPuncPtr = (FieldType *)FrmGetObjectPtr(frmP, FrmGetObjectIndex(frmP, fldPunc));
	fldDateTimePtr = (FieldType *)FrmGetObjectPtr(frmP, FrmGetObjectIndex(frmP, fldDateTime));
	lstQuickTextPtr = (ListType *)FrmGetObjectPtr(frmP, FrmGetObjectIndex(frmP, lstQuickText));
	//labQuickTextTipPtr = (ControlType *)FrmGetObjectPtr(frmP, FrmGetObjectIndex(frmP, labQuickTextTip));
	dbRef = DmOpenDatabaseByTypeCreator('SMqt', 'HsCh', dmModeReadOnly);
	if (DmGetLastErr())
	{
		QuickTextExist = false;
	}
	else
	{
		RecCount = DmNumRecordsInCategory(dbRef, dmAllCategories);
		lstBufSize = 0;
		lstBuf = MemPtrNew(5120); //5KB memory should be enough.
		if (! lstBuf) //Not Enough Memory
		{
			DmCloseDatabase(dbRef);
			return 1;
		}
		for (i = 0; i < RecCount; i ++)
		{
			recH = DmQueryRecord(dbRef, i);
			recP = MemHandleLock(recH);
			recSize = StrLen(recP);
			for (j = 0; j < recSize; j ++)
			{
				lstBuf[lstBufSize] = recP[j];
				lstBufSize ++;
			}
			lstBuf[lstBufSize] = 0x00;
			lstBufSize ++;
			MemHandleUnlock(recH);
		}
		lstBufSize --;
		MemPtrResize(lstBuf, lstBufSize);
		lstArrayHandle = SysFormPointerArrayToStrings(lstBuf, RecCount);
		lstItemStr = MemHandleLock(lstArrayHandle);
		LstSetListChoices (lstQuickTextPtr, lstItemStr, RecCount);
		DmCloseDatabase(dbRef);
	}
	LstSetSelection(lstQuickTextPtr, noListSelection);
	//LstEraseList(lstQuickTextPtr);
	//CtlDrawControl(labQuickTextTipPtr);
	fldTextHandle = MemHandleNew(15);
	fldPuncTextPtr = MemHandleLock(fldTextHandle);
	//~: 0xA1AB
	//々: 0xA1A9
	// : 0xA1A1
	//♂: 0xA1E1
	//♀: 0xA1E2
	fldPuncTextPtr[0] = 0xA1; fldPuncTextPtr[1] = 0xAB; fldPuncTextPtr[2] = 0x20;
	fldPuncTextPtr[3] = 0xA1; fldPuncTextPtr[4] = 0xA9; fldPuncTextPtr[5] = 0x20;
	fldPuncTextPtr[6] = 0xA1; fldPuncTextPtr[7] = 0xA1; fldPuncTextPtr[8] = 0x20;
	fldPuncTextPtr[9] = 0xA1; fldPuncTextPtr[10] = 0xE1; fldPuncTextPtr[11] = 0x20;
	fldPuncTextPtr[12] = 0xA1; fldPuncTextPtr[13] = 0xE2; fldPuncTextPtr[14] = 0x00;
	MemHandleUnlock(fldTextHandle);
	FldSetTextHandle(fldPuncPtr, fldTextHandle);
	FldDrawField(fldPuncPtr);
	FldSetSelection(fldPuncPtr, curSel, curSelEnd);
	fldTextHandle = MemHandleNew(100);
	fldDateTimeTextPtr = MemHandleLock(fldTextHandle);
	fldDateTimeTextPtr[0] = 0x00; fldDateTimeTextPtr[99] = 0x00;
	DateBuf = MemPtrNew(dateStringLength);
	TimeBuf = MemPtrNew(timeStringLength);
	SecondBuf = MemPtrNew(maxStrIToALen);
	TimSecondsToDateTime(TimGetSeconds(), &curDateTime);
	DateToAscii(curDateTime.month, curDateTime.day, curDateTime.year, dfYMDWithDashes, DateBuf);
	TimeToAscii(curDateTime.hour, curDateTime.minute, tfColon24h, TimeBuf);
	StrIToA(SecondBuf, (UInt32) curDateTime.second);
	StrCat(fldDateTimeTextPtr, DateBuf);
	StrCat(fldDateTimeTextPtr, " \0");
	StrCat(fldDateTimeTextPtr, TimeBuf);
	StrCat(fldDateTimeTextPtr, ":");
	StrCat(fldDateTimeTextPtr, SecondBuf);
	//StrCat(fldDateTimeTextPtr, "\0");
	MemHandleUnlock(fldTextHandle);
	FldSetTextHandle(fldDateTimePtr, fldTextHandle);
	FldDrawField(fldDateTimePtr);
	curObject = 0;
	curSysTime = TimGetSeconds();
	
	do 
	{
		/* change timeout if you need periodic nilEvents */
		EvtGetEvent(&event, 100);
		//Refresh time at every 60 sec.
		if ((TimGetSeconds() - curSysTime) >= 1)
		{
			curSysTime = TimGetSeconds();
			fldTextHandle = FldGetTextHandle(fldDateTimePtr);
			FldSetTextHandle(fldDateTimePtr, NULL);
			fldDateTimeTextPtr = MemHandleLock(fldTextHandle);
			TimSecondsToDateTime(TimGetSeconds(), &curDateTime);
			DateToAscii(curDateTime.month, curDateTime.day, curDateTime.year, dfYMDWithDashes, DateBuf);
			TimeToAscii(curDateTime.hour, curDateTime.minute, tfColon24h, TimeBuf);
			StrIToA(SecondBuf, (UInt32) curDateTime.second);
			fldDateTimeTextPtr[0] = 0x00;
			StrCat(fldDateTimeTextPtr, DateBuf);
			StrCat(fldDateTimeTextPtr, " \0");
			StrCat(fldDateTimeTextPtr, TimeBuf);
			StrCat(fldDateTimeTextPtr, ":");
			StrCat(fldDateTimeTextPtr, SecondBuf);
			//StrCat(fldDateTimeTextPtr, "\0");
			MemHandleUnlock(fldTextHandle);
			FldSetTextHandle(fldDateTimePtr, fldTextHandle);
			FldDrawField(fldDateTimePtr);
			if (curObject == 1)
			{
				FldSetSelection(fldDateTimePtr, 0, FldGetTextLength(fldDateTimePtr));
			}
		}
		
		keyHandled = false;
		if (event.eType == keyDownEvent)
		{
			if (EvtKeydownIsVirtual(&event)) //FiveWay Nav Check
			{
				if (IsFiveWayNavEvent(&event))
				{
					if (NavKeyPressed(&event, Right) && curObject == 0)
					{
						keyHandled = true;
						if (curSel < 15)
						{
							fldTextHandle = FldGetTextHandle(fldPuncPtr);
							fldPuncTextPtr = MemHandleLock(fldTextHandle);
							FldSetTextHandle(fldPuncPtr, NULL);
							curSel += 3;
							if (curSel >= 15)
							{
								curSel -= 3;
							}
							curSelEnd = curSel + 2;
							MemHandleUnlock(fldTextHandle);
							FldSetTextHandle(fldPuncPtr, fldTextHandle);
							FldDrawField(fldPuncPtr);
							FldSetSelection(fldPuncPtr, curSel, curSelEnd);
						}
					}
					else if (NavKeyPressed(&event, Left) && curSel > 0 && curObject == 0)
					{
						keyHandled = true;
						fldTextHandle = FldGetTextHandle(fldPuncPtr);
						fldPuncTextPtr = MemHandleLock(fldTextHandle);
						FldSetTextHandle(fldPuncPtr, NULL);
						curSelEnd = curSel - 1;
						curSel -= 3;
						MemHandleUnlock(fldTextHandle);
						FldSetTextHandle(fldPuncPtr, fldTextHandle);
						FldDrawField(fldPuncPtr);
						FldSetSelection(fldPuncPtr, curSel, curSelEnd);
					}
					else if ((NavKeyPressed(&event, Up) || event.data.keyDown.chr == 11) && curObject > 0)
					{
						keyHandled = true;
						if (lstItem == 0)
						{
							if (curObject == 2) //QuickText -> DateTime
							{
								LstSetSelection(lstQuickTextPtr, noListSelection);
								//LstEraseList(lstQuickTextPtr);
								//CtlDrawControl(labQuickTextTipPtr);
								FldSetSelection(fldDateTimePtr, 0, FldGetTextLength(fldDateTimePtr));
								curObject --;
							}
							else if (curObject == 1) //DateTime -> Punc
							{
								FldSetSelection(fldDateTimePtr, 0, 0);
								FldSetSelection(fldPuncPtr, 0, 2);
								curSel = 0;
								curSelEnd = 2;
								curObject --;
							}
						}
						else
						{
							lstItem --;
							LstSetSelection(lstQuickTextPtr, lstItem);
						}
					}
					else if ((NavKeyPressed(&event, Down) || event.data.keyDown.chr == 12))
					{
						keyHandled = true;
						if (curObject == 0) //Punc -> DateTime
						{
							FldSetSelection(fldPuncPtr, 0, 0);
							FldSetSelection(fldDateTimePtr, 0, FldGetTextLength(fldDateTimePtr));
							curObject ++;
						}
						else if (curObject == 1 && QuickTextExist) //DateTime -> QuickText
						{
							FldSetSelection(fldDateTimePtr, 0, 0);
							LstSetSelection(lstQuickTextPtr, 0);
							curObject ++;
						}
						else if (curObject == 2 && lstItem < RecCount)
						{
							lstItem ++;
							if (lstItem == RecCount)
							{
								lstItem --;
							}
							LstSetSelection(lstQuickTextPtr, lstItem);
						}
					}
					else if (NavKeyPressed(&event, Select))
					{
						keyHandled = true;
						if (curObject == 2) //Return QuickText
						{
							StrCat(str, LstGetSelectionText(lstQuickTextPtr, LstGetSelection(lstQuickTextPtr)));
						}
						else if (curObject == 1) //Return DateTime
						{
							StrCat(str, FldGetTextPtr(fldDateTimePtr));
						}
						else if (curObject == 0)
						{
							fldPuncTextPtr = FldGetTextPtr(fldPuncPtr);
							str[0] = fldPuncTextPtr[curSel];
							str[1] = fldPuncTextPtr[curSel + 1];
							str[2] = 0x00;
						}
						StrCat(str, "\0");
						exit = true;
					}
				}
			}
			else if (event.data.keyDown.chr == 0x0008) //Backspace, Quit
			{
				exit = true;
			}
		}			
		if (! keyHandled)
		{
			if (! SysHandleEvent(&event))
			{
				if (! MenuHandleEvent(0, &event, &error))
				{
					FrmDispatchEvent(&event);
				}
			}
		}
		/*else
		{
			MemSet(&event, sizeof(EventType), 0);
			event.eType = nilEvent;
		}*/
	} while (event.eType != appStopEvent && ! exit);
	
	fldTextHandle = FldGetTextHandle(fldPuncPtr);
	FldSetTextHandle(fldPuncPtr, NULL);
	MemHandleFree(fldTextHandle);
	fldTextHandle = FldGetTextHandle(fldDateTimePtr);
	FldSetTextHandle(fldDateTimePtr, NULL);
	MemHandleFree(fldTextHandle);
	MemPtrFree(DateBuf);
	MemPtrFree(TimeBuf);
	MemPtrFree(SecondBuf);
	if (QuickTextExist)
	{
		MemHandleUnlock(lstArrayHandle);
		MemHandleFree(lstArrayHandle);
		MemPtrFree(lstBuf);
	}
	return 0;
}

static Boolean MainFormDoCommand(UInt16 command)
{
	Boolean     handled = false;
	FormType *  pForm;

	switch (command) {
		case 1002:
			pForm = FrmInitForm(AboutForm);
			FrmDoDialog(pForm);					// Display the About Box.
			FrmDeleteForm(pForm);
			handled = true;
			break;

	}
	
	return handled;
}

static Boolean MainFormHandleEvent(EventType * eventP)
{
	Boolean				handled = false;
	FormType			* frmP;
	LocalID				dbID;
	UInt16				cardNo;
	UInt16				pSize;
	ChineseMatePref		* cpf; //改为指针以便作为消息的参数(2005-11-15)。
	UInt32				cpfAddr;
	
	switch (eventP->eType) 
	{
		case menuEvent:
			return MainFormDoCommand(eventP->data.menu.itemID);
			break;

		case frmOpenEvent:
			
			handled = true;
			break;
			
		case frmUpdateEvent:
			/* 
			 * To do any custom drawing here, first call
			 * FrmDrawForm(), then do your drawing, and
			 * then set handled to true. 
			 */
			break;
			
		case ctlSelectEvent:
		{
			if (eventP->data.ctlSelect.controlID == pbtnEnableCM)
			{
				frmP = FrmGetActiveForm();
				SysCurAppDatabase(&cardNo, &dbID);
				FtrGet(appFileCreator, 0, &cpfAddr);
				cpf = (ChineseMatePref *) cpfAddr;
				cpf->cmActived = false;
				cpf->power = true;
				pSize = sizeof(ChineseMatePref);
				PrefSetAppPreferences(appFileCreator, appPrefID, appPrefVersionNum, cpf, pSize, true);
				SysNotifyRegister(cardNo, dbID, sysNotifyAppLaunchingEvent, NULL, sysNotifyNormalPriority, cpf);
				handled = true;
			}
			else if (eventP->data.ctlSelect.controlID == pbtnDisableCM)
			{
				SysCurAppDatabase(&cardNo, &dbID);
				SysNotifyUnregister(cardNo, dbID, sysNotifyAppLaunchingEvent, sysNotifyNormalPriority);
				//SysNotifyUnregister(cardNo, dbID, sysNotifyVirtualCharHandlingEvent, sysNotifyNormalPriority);
				FtrGet(appFileCreator, 0, &cpfAddr);
				cpf = (ChineseMatePref *) cpfAddr;
				cpf->cmActived = false;
				cpf->power = false;
				pSize = sizeof(ChineseMatePref);
				PrefSetAppPreferences(appFileCreator, appPrefID, appPrefVersionNum, cpf, pSize, true);
				/*MemPtrFree(cpf);
				FtrSet(appFileCreator, 0, 0);*/
				handled = true;
			}
			else if (eventP->data.ctlSelect.controlID == cbNativeSeach)
			{
				FtrGet(appFileCreator, 0, &cpfAddr);
				cpf = (ChineseMatePref *) cpfAddr;
				cpf->nativeSeach = (! cpf->nativeSeach);
				pSize = sizeof(ChineseMatePref);
				PrefSetAppPreferences(appFileCreator, appPrefID, appPrefVersionNum, cpf, pSize, true);
				handled = true;
			}
			else if (eventP->data.ctlSelect.controlID == cbFastSearch)
			{
				FtrGet(appFileCreator, 0, &cpfAddr);
				cpf = (ChineseMatePref *) cpfAddr;
				cpf->fsMode = (! cpf->fsMode);
				pSize = sizeof(ChineseMatePref);
				PrefSetAppPreferences(appFileCreator, appPrefID, appPrefVersionNum, cpf, pSize, true);
				handled = true;
			}
			else if (eventP->data.ctlSelect.controlID == cbEnableFI)
			{
				frmP = FrmGetActiveForm();
				FtrGet(appFileCreator, 0, &cpfAddr);
				cpf = (ChineseMatePref *) cpfAddr;
				cpf->fiEnabled = (! cpf->fiEnabled);
				pSize = sizeof(ChineseMatePref);
				PrefSetAppPreferences(appFileCreator, appPrefID, appPrefVersionNum, cpf, pSize, true);
				SysCurAppDatabase(&cardNo, &dbID);
				if (cpf->fiEnabled)
				{
					SysNotifyRegister(cardNo, dbID, sysNotifyVirtualCharHandlingEvent, NULL, sysNotifyNormalPriority, cpf);
				}
				else
				{
					SysNotifyUnregister(cardNo, dbID, sysNotifyVirtualCharHandlingEvent, sysNotifyNormalPriority);
			

⌨️ 快捷键说明

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