亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? sugarmemolearn2.c

?? 最好用的背單詞軟件, palm 平臺, 如果能移植到別的平臺
?? C
?? 第 1 頁 / 共 4 頁
字號:
#include <PalmOS.h>

#include "SugarMemo.h"
#include "SugarMemoRsc.h"
#include "SugarMemoLearn2.h"
#include "SugarMemoDB.h"
#include "SugarMemoTools.h"

//	Sony Jog
#define 	vchrJogUp				(0x1700)
#define 	vchrJogDown				(0x1701)
#define 	vchrJogPushRepeat		(0x1702)
#define 	vchrJogPushedUp			(0x1703)
#define 	vchrJogPushedDown		(0x1704)
#define 	vchrJogPush				(0x1705)
#define 	vchrJogRelease			(0x1706)
#define 	vchrJogBack				(0x1707) 		/* added @ 2001 */


#define 	RowsInChoiceTable 	(Int16)7
#define 	ChoiceTableRowHeight		15

#define 	recollectionMode	true
#define 	testMode			false

#define 	BingoPassFailGroup 		17
#define		RightWrongGroup			23
#define 	DynamicPushButtonGroup 	6666
#define 	DynamicPushButtonStart	1234

#define		maxFail					8

WordFieldFlags UpperPaneFlag;
WordFieldFlags LowerPaneFlag;

UInt16 		UpperPaneTopAnchor;
UInt16 		UpperPaneFirstLineHeight;
Boolean 	UpperPaneScrollableUp;
Boolean		UpperPaneScrollableDown;
UInt16 		LowerPaneTopAnchor;
UInt16 		LowerPaneFirstLineHeight;
Boolean		LowerPaneScrollableUp;
Boolean		LowerPaneScrollableDown;

Boolean 	ShowNext = false;
Boolean 	ShowShow = false;
Boolean 	ShowChoices = false;
Boolean 	ShowRightWrong = false;
Boolean 	ShowBingoPassFail = false;

UInt32		StartingTicks;

WordFields	DefaultField;
WordFields	ChoiceField;

LearningStatus	CurrentLearningStatus;
ControlType* 	FieldTab[WordFieldsCount];
extern EditLabel fieldLabel[WordFieldsCount];

static Boolean 	Learn2FormDoCommand(UInt16 command);
static void 	Learn2FormInitChoiceBuffer();
static void 	Learn2FormInitChoiceTable();
static void		Learn2InitWord();
static void 	Learn2FormQuit();
static void 	DrawChoice(void* table, Int16 row, Int16 column, RectangleType* bounds);
static void 	StrPackString(char* P);
static void 	RemoveBlankHead(char** p);
static Boolean 	DrawField(RectangleType* bounds, char* p, UInt16* top, UInt16 align, 
	UInt16* topAnchor, UInt16* firstLineHeight, Boolean draw);
static Boolean 	DrawFields(RectangleType* bounds, WordFieldFlags flag, UInt16* top, UInt16* topAnchor, 
	UInt16* firstLineHeight, Boolean draw);
static Boolean 	DrawPane(RectangleType* bounds, WordFieldFlags flag, UInt16* topAnchor, UInt16* firstLineHeight);
static void 	DrawUpperPane(WordFieldFlags flag);
static void 	DrawLowerPane(WordFieldFlags flag);
static void 	LoadLowerPaneTab();
static void		ClearLowerPaneTab();
static void 	DrawChoiceTable();
static void		ResetUpperPane();
static void 	ResetLowerPane();
static void		ResetAllPush();
static void		Learn2FormDoButtonNext();
static void 	Learn2FormDoButtonShow();
static void		Learn2FormDoButtonPush(UInt16 controlID);
static void 	Learn2FormTableSelection(Int16 row);
static void		ClearChoiceTable();
static void 	ErasePane(UInt16 ObjectID);
static void 	Learn2ScrollUpperPane(Boolean up);
static void 	Learn2ScrollLowerPane(Boolean up);

static LearningStatus TossNextReviewMode();
static UInt8 Difficulty(float efactor);
static void 	Learn2ProcessReviewRating(Rating rating);
static void		Learn2ProcessLearningRating(Boolean right);
static void		Learn2FinishLearning();
static void 	Learn2FinishReview();
static void 	DrawTranslationLook();
static void 	DrawWordLook();
static void 	DrawTranslationRecollection();
static void 	DrawWordRecollection();
static void		DrawTranslationTest();
static void 	DrawWordTest();

static void		Learn2FormInit();

static Boolean 	Lefty();
static WordFieldFlags 	GetQuestionFields();
static WordFieldFlags 	GetAnswerFields();

static Boolean	LoadWord();
static void 	Learn2DoDynamicPushButton(WordFields field);
static void 	ToggleDynamicField(Boolean prevField);
static void 	Learn2ScrollChoiceSelection(Boolean up);

static void		Learn2ClipBoardWord();

static UInt16 	FontIDToListIndex(FontID font);
static FontID 	ListIndexToFontID(Int16 index);

Boolean Learn2FormHandleEvent(EventType * event){

	FormType* frmP = FrmGetActiveForm();
	Boolean handled = false;
	
	RectangleType bounds;
			
	switch (event->eType){
		
		case frmOpenEvent:
			
			Learn2FormInit();
			FrmDrawForm(frmP);
			if (LoadWord()) Learn2InitWord();
			else Learn2FormQuit();
			handled = true;
			break;
			
		case menuEvent:
			return Learn2FormDoCommand(event->data.menu.itemID);

		case penDownEvent:
			GetObjectBounds(Learn2UpperPaneScrollUpRepeating, &bounds);
			if (UpperPaneScrollableUp && RctPtInRectangle(event->screenX, event->screenY, &bounds)) 
				return false;
				
			GetObjectBounds(Learn2UpperPaneScrollDownRepeating, &bounds);
			if (UpperPaneScrollableDown && RctPtInRectangle(event->screenX, event->screenY, &bounds)) 
				return false;
			
			GetObjectBounds(Learn2UpperPaneGadget, &bounds);
			if (RctPtInRectangle(event->screenX, event->screenY, &bounds)){
				SndPlaySystemSound(sndClick);
				FrmGotoForm(EditForm);
				handled = true;
			}
			break;
			
		case ctlSelectEvent:
					
			if (event->data.ctlSelect.controlID - DynamicPushButtonStart < WordFieldsCount){
				Learn2DoDynamicPushButton(event->data.ctlSelect.controlID - DynamicPushButtonStart);
				handled = true;	
			}
			else {
				switch(event->data.ctlSelect.controlID){
					case Learn2NextButton:
						Learn2FormDoButtonNext();
						handled = true;
						break;
				
					case Learn2ShowButton:
						Learn2FormDoButtonShow();
						handled = true;
						break;
					
					case Learn2RightPushButton:
					case Learn2WrongPushButton:
					case Learn2BingoPushButton:
					case Learn2PassPushButton:
					case Learn2FailPushButton:
						Learn2FormDoButtonPush(event->data.ctlSelect.controlID);
						handled = true;
						break;
			
				}
			}
			break;
			
		case ctlRepeatEvent:
			switch(event->data.ctlRepeat.controlID){
				case Learn2UpperPaneScrollUpRepeating:
					Learn2ScrollUpperPane(true);
					break;
				case Learn2UpperPaneScrollDownRepeating:
					Learn2ScrollUpperPane(false);
					break;
				case Learn2LowerPaneScrollUpRepeating:
					Learn2ScrollLowerPane(true);
					break;
				case Learn2LowerPaneScrollDownRepeating:
					Learn2ScrollLowerPane(false);
					break;
			}
			break;
		
		case tblSelectEvent:
			Learn2FormTableSelection(event->data.tblSelect.row);
			handled = true;
			break;
			
		case keyDownEvent:
			if (EvtKeydownIsVirtual(event))
			{
				switch (event->data.keyDown.chr)
				{
					case vchrPageUp:
						if (ShowChoices){
							Learn2ScrollChoiceSelection(true);
						}
						else if (LowerPaneScrollableUp){
							Learn2ScrollLowerPane(true);
						}
						
						handled = true;
						break;
		
					case vchrPageDown:
						if (ShowChoices){
							Learn2ScrollChoiceSelection(false);
						}
						else if (LowerPaneScrollableDown){
							Learn2ScrollLowerPane(false);
						}
						handled = true;
						break;
						
					case	vchrJogUp:
					case	vchrJogDown:
					case	vchrJogPushRepeat:
					case	vchrJogPushedUp:
					case	vchrJogPushedDown:
					case	vchrJogPush:
					case	vchrJogRelease:
					case 	vchrJogBack:
						 return Learn2FormDoHardKey(event);
					
					default:
						break;
				}
			}
			break;
		
			
		default:
			break;
	}
	return handled;			
}

void Learn2FormInit(){
	
	//bingo, pass, fail push
	//right, wrong, push
	//next, show button
	//lowerpane scroll repeating
	FormType* frmP = FrmGetActiveForm();
	
	if (Lefty()){

		FrmSetObjectPosition(frmP, GetObjectIndex(Learn2BingoPushButton), 47, 145); 	//bingo push
		FrmSetObjectPosition(frmP, GetObjectIndex(Learn2PassPushButton), 23, 145);
		FrmSetObjectPosition(frmP, GetObjectIndex(Learn2FailPushButton), 1, 145);
	
		FrmSetObjectPosition(frmP, GetObjectIndex(Learn2RightPushButton), 38, 145);
		FrmSetObjectPosition(frmP, GetObjectIndex(Learn2WrongPushButton), 1, 145);

		FrmSetObjectPosition(frmP, GetObjectIndex(Learn2NextButton), 1, 145);
		FrmSetObjectPosition(frmP, GetObjectIndex(Learn2ShowButton), 1, 145);

		FrmSetObjectPosition(frmP, GetObjectIndex(Learn2LowerPaneScrollUpRepeating), 88, 145);
		FrmSetObjectPosition(frmP, GetObjectIndex(Learn2LowerPaneScrollDownRepeating), 88, 153);
		
	}
	else {
		
		FrmSetObjectPosition(frmP, GetObjectIndex(Learn2BingoPushButton), 86, 145); 	//bingo push
		FrmSetObjectPosition(frmP, GetObjectIndex(Learn2PassPushButton), 114, 145);
		FrmSetObjectPosition(frmP, GetObjectIndex(Learn2FailPushButton), 138, 145);
	
		FrmSetObjectPosition(frmP, GetObjectIndex(Learn2RightPushButton), 86, 145);
		FrmSetObjectPosition(frmP, GetObjectIndex(Learn2WrongPushButton), 123, 145);

		FrmSetObjectPosition(frmP, GetObjectIndex(Learn2NextButton), 86, 145);
		FrmSetObjectPosition(frmP, GetObjectIndex(Learn2ShowButton), 86, 145);

		FrmSetObjectPosition(frmP, GetObjectIndex(Learn2LowerPaneScrollUpRepeating), 60, 145);
		FrmSetObjectPosition(frmP, GetObjectIndex(Learn2LowerPaneScrollDownRepeating), 60, 153);
	
	}

	ShowNext = false;
 	ShowShow = false;
	ShowChoices = false;
	ShowRightWrong = false;
 	ShowBingoPassFail = false;

	HideObject(Learn2LowerPaneGadget);
	HideObject(Learn2UpperPaneGadget);
	Learn2FormInitChoiceTable();
	Learn2FormInitChoiceBuffer();
}

Boolean Learn2FormDoCommand(UInt16 command){
	
	Boolean handled = false;
	
	switch(command){
		
		case LearnOptionsMenuItem1300:  // font settings
			FrmGotoForm(FontForm);
			handled = true;
			break;
		
		case LearnOptionsMenuItem1302:	// quit
			Learn2FormQuit();
			handled = true;
			break;
			
		default:
			break;
	}
	return handled;
}

void Learn2FormInitChoiceTable(){
	
	Int16 row;
	
	TableType* table = GetObjectPtr(Learn2ChoiceTable);
	
	for (row = 0; row < RowsInChoiceTable; row++){
		TblSetItemStyle(table, row, 0, customTableItem);	
		TblSetRowHeight(table, row, 16);
		TblSetItemFont(table, row, 0, largeBoldFont);
		TblSetRowUsable(table, row, false);
	}
	
	TblSetColumnUsable(table, 0, true);
	TblSetCustomDrawProcedure(table, 0, DrawChoice);
}

void Learn2FormInitChoiceBuffer(){
	
	switch(HeaderRecordIndex){
		case LearningRecordIndex:
			InitHeaderBuffer(CurrentDB, LearningChoiceBuffer);
			break;
			
		case TestingRecordIndex:
			InitHeaderBuffer(CurrentDB, TestingChoiceBuffer);
			break;
			
		default:
			ErrDisplay("Error HeaderRecordIndex in Learn2FormInitChoiceBuffer");
			break;
	}
}

void DrawChoice(void* table, Int16 row, Int16 column, RectangleType* bounds){
	
	WordRecordType record;
	MemHandle recordH;
	
	char* strP;
	MemHandle strH;
	
	UInt16 index = TblGetRowID(table, row);
	Int16 strWidth, strLength;
	Boolean fit;
	FontID currFont;
	
	if (index == noRecord) return;
	
	GetWordRecord(CurrentDB, index, &record, &recordH);
	
	if (record.field[ChoiceField] == NULL || StrLen(record.field[ChoiceField]) == 0){
		MemHandleUnlock(recordH);
		return;
	}
	
	strH = MemHandleNew(StrLen(record.field[ChoiceField]) + 1);
	if (strH == NULL) return;
	
	strP = MemHandleLock(strH);
	
	StrCopy(strP, record.field[ChoiceField]);
	MemHandleUnlock(recordH);

//	Omitted by hytown to avoid phrase messy
//	StrPackString(strP);
		
	currFont = FntSetFont(largeBoldFont);
	strWidth = bounds->extent.x;
	strLength = StrLen(strP);
	FntCharsInWidth(strP, &strWidth, &strLength, &fit);
		
	if (!fit){
		FntSetFont(boldFont);
		strWidth = bounds->extent.x;
		strLength = StrLen(strP);
		FntCharsInWidth(strP, &strWidth, &strLength, &fit);
			
		if (!fit){
			strWidth = bounds->extent.x;
			strLength = StrLen(strP);
			FntSetFont(stdFont);
			FntCharsInWidth(strP, &strWidth, &strLength, &fit);
		}
	}
		
	WinDrawChars(strP, StrLen(strP), bounds->topLeft.x + (bounds->extent.x - strWidth)/2, 
		bounds -> topLeft.y + (bounds -> extent.y + 2 - FntLineHeight())/2 - 1);
			
	MemHandleFree(strH);
	FntSetFont(currFont);

}

void StrPackString(char* P){
	char* P1, *p, *p1;
	MemHandle h;
	
	if (P == NULL || StrLen(P) == 0) return;
	h = MemHandleNew(StrLen(P) + 1);
	if (h == NULL) return;
	P1 = MemHandleLock(h);
	
	p = P;
	p1 = P1;
	
	while (true){

		if ((*p) != 9 && (*p) != 10 && (*p) != 13 && (*p) != 32){
			(*p1) = (*p);
			if ((*p) == '\0') break;
			p1 ++;
		}
		p++;
	}

	StrCopy(P, P1);
	
	MemPtrFree(P1);	
}

void RemoveBlankHead(char** p){
	while ((**p) == 9 			//Horizontal Tabulation
			|| (**p) == 10		//Line Feed
			|| (**p) == 13		//Carrige Return
			|| (**p) == 32)		//Space
		(*p)++;
}

Boolean DrawField(RectangleType* bounds, char* p, UInt16* top, UInt16 align, 
	UInt16* topAnchor, UInt16* firstLineHeight, Boolean draw){

	Int16 strWidth;
	Int16 strLength;
	Int16 xpos;
	Int16 lineHeight = FntLineHeight();
	char* p2;
	Boolean reachBottom = false;
	
	while (true){
		
		//	remove blank
		RemoveBlankHead(&p);
		
		if ((*p) == 0) break;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本伊人午夜精品| 国产午夜精品久久久久久免费视 | 国产午夜三级一区二区三| 久久午夜国产精品| 一区在线中文字幕| 午夜一区二区三区在线观看| 午夜视频久久久久久| 国产一区美女在线| 色哟哟国产精品| 欧美一级片在线看| 国产精品欧美一区喷水| 一区二区三区成人| 美国毛片一区二区| 99久久婷婷国产| 日韩欧美区一区二| 亚洲精品久久久蜜桃| 日韩中文字幕91| 国产成人av网站| 欧美性大战久久久久久久蜜臀| 欧美另类videos死尸| 久久只精品国产| 五月综合激情网| av激情成人网| 久久久国产精品不卡| 亚洲成人久久影院| 成人免费高清在线| 日韩精品一区二区在线观看| 一区二区三区美女| 成人久久视频在线观看| 91精品国产色综合久久ai换脸 | 91麻豆免费观看| 欧美精品一区二| 五月婷婷久久综合| 在线观看视频一区二区欧美日韩| 欧美成人r级一区二区三区| 亚洲精品成人在线| 国产精品夜夜嗨| 欧美电影免费观看高清完整版在| 亚洲综合成人在线| 成人福利视频网站| 国产欧美一区二区在线| 青青草视频一区| 在线成人免费观看| 亚洲一区二区精品3399| 懂色av中文一区二区三区| 欧美色综合久久| 一区av在线播放| 91麻豆swag| 亚洲日本在线天堂| eeuss影院一区二区三区| 国产欧美1区2区3区| 国产高清视频一区| 国产清纯白嫩初高生在线观看91| 国产在线精品国自产拍免费| 欧美成人一区二区三区在线观看| 亚洲宅男天堂在线观看无病毒| 99精品欧美一区二区三区小说| 国产精品色噜噜| 99久久99久久久精品齐齐| 国产精品欧美久久久久无广告 | 日韩欧美国产一二三区| 日韩电影免费一区| 欧美日韩国产成人在线91| 亚洲午夜免费福利视频| 欧美视频第二页| 日韩精品一二三区| 欧美精品一区二区三区蜜臀| 精东粉嫩av免费一区二区三区| 欧美大片一区二区三区| 国产一区二区伦理| 国产精品久线观看视频| 日本韩国欧美一区二区三区| 一区二区三区国产豹纹内裤在线| 99久久精品费精品国产一区二区| 一区二区三区不卡在线观看| 欧美乱妇20p| 国产在线不卡一卡二卡三卡四卡| 久久久精品综合| 91在线视频播放地址| 亚洲第一综合色| 欧美一卡2卡3卡4卡| 日韩av一区二区在线影视| 7777精品伊人久久久大香线蕉的| 美国三级日本三级久久99| 国产欧美一区二区精品仙草咪| 成人精品高清在线| 亚洲成a人片在线观看中文| 欧美日本免费一区二区三区| 久久精品999| 亚洲色图欧洲色图| 欧美一级免费观看| 成人免费视频caoporn| 亚洲成人精品一区二区| 国产日韩欧美综合在线| 一本色道久久综合亚洲91| 日韩电影在线一区二区| 久久看人人爽人人| 欧美影片第一页| 国产美女av一区二区三区| 亚洲成人资源网| 国产精品午夜久久| 91精品国产综合久久精品性色| 国产夫妻精品视频| 石原莉奈在线亚洲三区| 国产精品水嫩水嫩| 欧美岛国在线观看| 欧美亚日韩国产aⅴ精品中极品| 精品一区二区久久久| 一区二区在线电影| 久久久久一区二区三区四区| 欧美日韩国产高清一区二区三区| 激情综合色丁香一区二区| 国产精品天天看| 久久久久久一二三区| 欧洲另类一二三四区| 粉嫩av亚洲一区二区图片| 免费观看一级特黄欧美大片| 亚洲女厕所小便bbb| 久久影院视频免费| 欧美成人猛片aaaaaaa| 欧美视频一区在线观看| 99国产一区二区三精品乱码| 国产伦精品一区二区三区在线观看| 亚洲一区二区三区中文字幕 | 亚洲国产aⅴ成人精品无吗| 国产精品伦理在线| 久久久高清一区二区三区| 日韩一级大片在线观看| 欧美人与性动xxxx| 欧美三级乱人伦电影| 91成人网在线| 色天天综合色天天久久| av亚洲精华国产精华精华| 成人91在线观看| 日本欧美加勒比视频| 中文字幕高清不卡| 中文字幕国产一区二区| 国产精品天干天干在观线| 久久久久久久综合日本| 久久一二三国产| 久久精品男人天堂av| 久久理论电影网| 亚洲国产精品二十页| 中文字幕av一区二区三区高| 国产婷婷色一区二区三区| 精品粉嫩超白一线天av| 久久精品一区二区| 中文字幕成人网| 亚洲美女视频一区| 亚洲一区二区偷拍精品| 亚洲国产日日夜夜| 欧美国产日韩一二三区| 久久久久88色偷偷免费| 日本一区二区视频在线| 国产视频不卡一区| 亚洲女同一区二区| 亚洲国产毛片aaaaa无费看| 视频精品一区二区| 国产精品影音先锋| 成人av网站在线观看| 欧美中文字幕一区二区三区亚洲 | 久久99精品久久久久久久久久久久| 丝袜诱惑制服诱惑色一区在线观看| 亚洲国产综合91精品麻豆| 亚洲成va人在线观看| 国内精品嫩模私拍在线| 波多野结衣中文字幕一区二区三区 | 成人激情文学综合网| 91国模大尺度私拍在线视频| 欧美日韩国产成人在线91| 欧美老肥妇做.爰bbww视频| 日韩精品一区二区三区在线| 91精品国产乱码| 中文av一区二区| 亚洲一级不卡视频| 韩国精品一区二区| 欧美系列一区二区| 1024成人网色www| 国产成人无遮挡在线视频| 欧美精品日韩综合在线| 日韩理论片在线| 粗大黑人巨茎大战欧美成人| 欧美大片拔萝卜| 五月婷婷激情综合网| 91九色最新地址| 国产精品亲子伦对白| 国产乱色国产精品免费视频| 日韩免费成人网| 亚洲成人精品一区二区| 色婷婷综合久久久久中文 | 亚洲色图在线看| 国产成人av一区二区三区在线 | 欧美放荡的少妇| 亚洲午夜精品久久久久久久久| 91在线观看美女| 日韩毛片在线免费观看| 成人午夜在线免费| 国产农村妇女毛片精品久久麻豆| 精品一区二区三区香蕉蜜桃 | 美女视频免费一区|