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

📄 sugarmemofont.c

📁 最好用的背单词软件, palm 平台, 如果能移植到别的平台
💻 C
字号:
#include <PalmOS.h> 

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

#define 	FieldNameColumn 	0
#define	FontColumn			1
#define	BlankColumn1		2
#define	AlignColumn			3
#define	BlankColumn2		4


#define RowsInFontSettingTable (Int16)4

extern WordFields FieldMap[4];

Char* FieldName[4] = {"Word", "Phonetic", "Translation", "Note"};

static void 	FontFormInit();
static void 	FontFormLoadTable();
static Int16 	FontIDToListIndex(FontID font);
static FontID	ListIndexToFontID(Int16 index);
static void 	FontFormSaveSetting();
static void 	FontDrawTableCell(void * table, Int16 row, Int16 column, RectanglePtr bounds);


Boolean FontFormHandleEvent(EventType* event){
	FormType* frmP = FrmGetActiveForm();
	Boolean handled = false;
	
	switch (event->eType){
		
		case frmOpenEvent:
			FontFormInit();
			FrmDrawForm(frmP);
			handled = true;
			break;
			
			
		case ctlSelectEvent:
			
			switch(event->data.ctlSelect.controlID){
				
				case FontOKButton:
					FontFormSaveSetting();
					FrmGotoForm(Learn2Form);
					handled = true;
					break;
					
				
				case FontCancelButton:
					FrmGotoForm(Learn2Form);
					handled = true;
					break;
					
				default:
					break;
			
			}
						
		default:
			break;
	}
	
	return handled;



}

void FontFormInit(){
	
	TableType* table = GetObjectPtr(FontSettingTable);
	Int16 row;
	
	for (row = 0; row < RowsInFontSettingTable; row++){
	
		TblSetItemStyle(table, row, FieldNameColumn, customTableItem);
		TblSetItemStyle(table, row, FontColumn, popupTriggerTableItem);
		TblSetItemStyle(table, row, BlankColumn1, customTableItem);
		TblSetItemStyle(table, row, AlignColumn, popupTriggerTableItem);
		TblSetItemStyle(table, row, BlankColumn2, customTableItem);
	
		TblSetRowUsable(table, row, false);
	}
	
	TblSetColumnUsable(table, FieldNameColumn, true);
	TblSetColumnUsable(table, FontColumn, true);
	TblSetColumnUsable(table, BlankColumn1, true);
	TblSetColumnUsable(table, AlignColumn, true);
	TblSetColumnUsable(table, BlankColumn2, true);

	TblSetCustomDrawProcedure(table, FieldNameColumn, FontDrawTableCell);
	TblSetCustomDrawProcedure(table, BlankColumn1, FontDrawTableCell);
	TblSetCustomDrawProcedure(table, BlankColumn2, FontDrawTableCell);	
	
	TblSetColumnSpacing(table, FontColumn, 0);
	TblSetColumnSpacing(table, AlignColumn, 0);
	
	FontFormLoadTable();

}

void FontFormLoadTable(){
	
	TableType* table = GetObjectPtr(FontSettingTable);
	Int16 row;
	WordFields field;
	
	SugarAppInfoType* app;
	ListType* fontList = GetObjectPtr(FontFontList);
	ListType* alignList = GetObjectPtr(FontAlignList);
	
	Int16 index, align;
	
	app = GetAppInfoPtr(CurrentDB);
	
	if (app == NULL) return;
	
	for (row = 0; row< RowsInFontSettingTable; row++){
	
		field = FieldMap[row];
		TblSetRowID(table, row, field);
		
		index = FontIDToListIndex(app -> learnFieldFont[field]);
		TblSetItemInt(table, row, FontColumn, index);
		TblSetItemPtr(table, row, FontColumn, fontList);
		
		align = app -> learnFieldAlignment[field];
		TblSetItemInt(table, row, AlignColumn, align);
		TblSetItemPtr(table, row, AlignColumn, alignList);
	
		TblSetRowUsable(table, row, true);
	}
	MemPtrUnlock(app);
		
	TblDrawTable(table);

}

void FontFormSaveSetting(){
	
	TableType* table = GetObjectPtr(FontSettingTable);
	
	SugarAppInfoType* app;
	SugarAppInfoType* appHelper = 0;
	Int16 row, index;
	TextAlignment align;
	FontID font;
	WordFields field;
	
	app = GetAppInfoPtr(CurrentDB);
	
	if (app == NULL) return;
	
	for (row = 0; row < RowsInFontSettingTable; row++){
			
		field = TblGetRowID(table, row);
		
		index = TblGetItemInt(table, row, FontColumn);
		font = ListIndexToFontID(index);
		
		DmWrite(app, (UInt32)&appHelper -> learnFieldFont[field], &font, sizeof(font));
		
		align = (TextAlignment)TblGetItemInt(table, row, AlignColumn);
		
		DmWrite(app, (UInt32)&appHelper -> learnFieldAlignment[field], &align, sizeof(align));
	
	}
	MemPtrUnlock(app);
}

Int16 FontIDToListIndex(FontID font){
	UInt16 i;
	
	switch(font){
		
		case stdFont:
			i = 0;
			break;
		
		case boldFont:
			i = 1;
			break;
		
		case largeFont:
			i = 2;
			break;
		
		case largeBoldFont:
			i = 3;
			break;
			
		case OS5_16_Font:
			i = 4;
			break;
		
		case PhoneticSmallFont:
			i = 5;
			break;
			
		case PhoneticLargeFont:
			i = 6;
			break;
			
		case PhoneticHugeFont:
			i = 7;
			break;
			
		default:
			break;
	}
	
	return i;
}

FontID ListIndexToFontID(Int16 index){

	if (index == 0) return stdFont;
	if (index == 1) return boldFont;
	if (index == 2) return largeFont;
	if (index == 3) return largeBoldFont;
	if (index == 4) return OS5_16_Font;
	if (index == 5) return PhoneticSmallFont;
	if (index == 6) return PhoneticLargeFont;
	if (index == 7) return PhoneticHugeFont;
	
	return stdFont;
}

void FontDrawTableCell(void * table, Int16 row, Int16 column, RectanglePtr bounds){

	RectangleType rct = *bounds;

	switch(column){
		case FieldNameColumn:
			
			WinDrawChars(FieldName[row], StrLen(FieldName[row]), bounds -> topLeft.x, bounds -> topLeft.y);	
			break;
			
		case BlankColumn1:
		case BlankColumn2:
			rct.topLeft.x--;
			WinEraseRectangle(&rct, 0);
			break;
	
	}	


}

⌨️ 快捷键说明

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