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

📄 projlistgui.c

📁 个人日程管理系统
💻 C
📖 第 1 页 / 共 2 页
字号:
/* -*-Mode:C; tab-width:4; indent-tabs-mode:t; c-file-style:"stroustrup";-*- *//* Main code for Project *///#define ERROR_CHECK_LEVEL 2#include <PalmOS.h>#include <DateGlue.h>#include <TxtGlue.h>#include <FntGlue.h>#include <TsmGlue.h>#include <WinGlue.h>#include <TblGlue.h>#include "handera/Vga.h"//#include "SonyCLIE.h"#include "link.h"#include "task.h"#include "xb.h"#include "progectdb.h"#include "progectRsc.h"#include "progect.h"#include "flat.h"#include "btm.h"#include "beam.h"// Palm MODEL support#include "palmMODEL.h"// icon support#include "icon.h"// ToDo export support#include "ToDoDB.h"// Memo linking support#include "MemoDB.h"// address linking support#include "AddressDB.h"// Doc export support#include "doc.h"// Category support#include "category.h"// history support#include "history.h"// hotsync support#include "aftersync.h"#include "projlistGUI.h"#include "projlistMODEL.h"// prototypesvoid ProjectListAdjustScrollRate(void);void ProjectListScroll (WinDirectionType direction, UInt16 units, Boolean byLine);void ProjectListResetScrollRate(void);UInt16 ProjectListGetCurrentSelection(void);void ProjectListNextCategory(void);void ProjectListLoadTable(FormType *frmP);void ProjectListHandleRename(void);// staticsstruct ProjectListGlobals{//UInt16 gCurrentSelection; // current selection in project listchar CategoryName[dmCategoryLength];UInt16 TopVisibleRecord;UInt16 LastSelectedRecord;// These are used for accelerated scrollingUInt16 LastSeconds;UInt16 ScrollUnits;privateRecordViewEnum PrivateRecordVisualStatus;Boolean formClosing;};static struct ProjectListGlobals ProjectList_Globals={"",0,0,0,0};// Scroll rate values#define scrollDelay						2#define scrollAcceleration					2#define scrollSpeedLimit					5// Form Update Codes#define frmUpdateTableCode frmRedrawUpdateCode+1#define frmRedrawTableCode frmUpdateTableCode+1/**************************************************************************** * Name : FrmProjectListInit * Desc : init FrmProjectList * Parm : FormPtr frm * Out  :  * Auth : lb, 08.08.2000 * Rem  : no error handling ***************************************************************************/void FrmProjectListInit(FormPtr frm){	ControlType *popup;	Int16 row;	Int16 numRows;	TablePtr table;	//	// initialize our model	//	ProjectListMODELInit();	// handle a weirdness in the GUI	ProjectList_Globals.formClosing=false;	//	// Handle private record status	//	ProjectList_Globals.PrivateRecordVisualStatus = (privateRecordViewEnum)PrefGetPreference(prefShowPrivateRecords);	//	// Setup Category List	//	CategoryGetName (ProjectListMODELGetDBRef(), ProjectListMODELGetCurrentCategory(), ProjectList_Globals.CategoryName);	popup = FrmGetObjectPtr(frm, FrmGetObjectIndex(frm, ProjectCategoryPopup));	CategorySetTriggerLabel (popup, ProjectList_Globals.CategoryName);	//	// setup table	//	table=(TablePtr) FrmGetObjectPtr(frm,FrmGetObjectIndex(frm,ProjectListTable));	numRows=TblGetNumberOfRows(table);	// setup the rows	for(row=0;row<numRows;row++)	{		TblSetItemStyle(table,row,cardIconColumn,customTableItem);		TblSetItemStyle(table,row,projectNameColumn,customTableItem);		TblSetItemStyle(table,row,noteIconColumn,customTableItem);		TblSetRowUsable(table,row,false);	}	// setup the columns	TblSetColumnUsable(table,cardIconColumn,true);	TblSetColumnUsable(table,projectNameColumn,true);	TblSetColumnUsable(table,noteIconColumn,true);        // Set the callback routine that will draw the records.	TblSetCustomDrawProcedure (table, cardIconColumn, ProjectListDrawRecord);	TblSetCustomDrawProcedure (table, projectNameColumn, ProjectListDrawRecord);	TblSetCustomDrawProcedure (table, noteIconColumn, ProjectListDrawRecord);	// When starting out, there is nothing previously selected	ProjectList_Globals.LastSelectedRecord=noRecord;	ProjectListLoadTable(frm);} // void FrmProjectListInit(FormPtr frm)void FrmProjectListCleanUp(void){//	DEBUG1("FrmProjectListCLeanup");	// handle a weirdness in the GUI	ProjectList_Globals.formClosing=false;	// clean up our model	ProjectListMODELCleanUp();} // void FrmProjectListCleanUp(void)void SelectCategory (void){	FormType* frmP;//	TableType* tblP;	UInt16 category;	Boolean categoryEdited;	// Process the category popup list.	category = ProjectListMODELGetCurrentCategory();	frmP = FrmGetActiveForm();	categoryEdited = CategorySelect (ProjectListMODELGetDBRef(), frmP, ProjectCategoryPopup,		 ProjectCategoryList, true, &category, ProjectList_Globals.CategoryName, 1, categoryDefaultEditCategoryString);	if ( categoryEdited || (category != ProjectListMODELGetCurrentCategory()))	{		ProjectListMODELSetCurrentCategory(category);		FrmUpdateForm(FrmProjectList, frmUpdateTableCode);//		PrvListClearLookupString();	}}Boolean FrmProjectListHandleEvent (EventPtr e){	Boolean handled = false;	FormPtr frm;	TableType* 	tblP;	UInt16 currentSelection;	ProjectListEntry *record;	Char projectName[dmDBNameLength];	Err err;	frm = FrmGetActiveForm();	switch (e->eType) {	case frmUpdateEvent:		switch(e->data.frmUpdate.updateCode)		{			case frmRedrawUpdateCode:				FrmDrawForm(frm);				handled = true;				break;			case frmUpdateTableCode:				tblP=(TablePtr) FrmGetObjectPtr(frm,FrmGetObjectIndex(frm,ProjectListTable));				ProjectListLoadTable(frm);				// No Break on purpose			case frmRedrawTableCode:				tblP=(TablePtr) FrmGetObjectPtr(frm,FrmGetObjectIndex(frm,ProjectListTable));			        TblRedrawTable(tblP);				handled = true;				break;			default:				break;		}		break;	case frmOpenEvent:		FrmProjectListInit(frm);		FrmDrawForm(frm);		handled = true;		break;		case frmCloseEvent:		FrmProjectListCleanUp();		// handled = false 		break;	case menuEvent:		MenuEraseStatus(NULL);		switch(e->data.menu.itemID) {			case MenuMainPreferences:				currentSelection=ProjectListGetCurrentSelection();				if (noRecord ==currentSelection)				{					DEBUG1("Please select a project to open first");					break;				}					record=ProjectListMODELGetRecord(currentSelection);				err=OpenDB(record->cardNumber,record->databaseName,&gdbP);				MemPtrUnlock(record);				if(errNone == err)				{					ShowProjectPropertiesDialog();					FrmUpdateForm(FrmProjectList, frmUpdateTableCode);					CloseDB(gdbP);				}				break;			case MenuProjectListUpdateList:				ProjectListMODELUpdate();				FrmUpdateForm(FrmProjectList, frmUpdateTableCode);				break;			case MenuProjectListAbout:				FrmCustomAlert(ProgectAbout, VERSION, " ", " ");				break;			case MenuProjectListDuplicate:				// if we have a selection				currentSelection = ProjectListGetCurrentSelection();				if (noRecord != currentSelection)				{					record = ProjectListMODELGetRecord(currentSelection);					if (Btn_Choose_Name_Ok ==  ShowChooseNameDialog(record->databaseName,projectName))					{						if(DuplicateDB(record->databaseName, projectName))						{							FrmCustomAlert(AltAlreadyExists, projectName, NULL, NULL);						}						FrmUpdateForm(FrmProjectList, frmUpdateTableCode);					}					MemPtrUnlock(record);				}				else				{					DEBUG1("Please select a project to duplicate first");				}				handled = true;				break;			case MenuProjectListBeam:				// if we have a selection				currentSelection = ProjectListGetCurrentSelection();				if (noRecord != currentSelection)				{					record = ProjectListMODELGetRecord(currentSelection);					SafeCopy(projectName, record->databaseName,dmDBNameLength);					MemPtrUnlock(record);					Prepend(projectName); // adds "lbPG-" to the DBName...					SendDB(CREATOR, projectName, EXTENSION, "DescrDBStore");				}				else				{					DEBUG1("Please select a project to beam first");				}				handled = true;				break;			case MenuProjectListOpen:				ProjectListHandleOpen();				handled = true;				break;			case MenuProjectListNew:				ProjectListHandleNew();				handled = true;				break;			case MenuProjectListDelete:				// if we have a selection				currentSelection = ProjectListGetCurrentSelection();				if (noRecord != currentSelection)				{				Char DBName[dmDBNameLength];					record = ProjectListMODELGetRecord(currentSelection);					SafeCopy(DBName, record->databaseName,dmDBNameLength);					MemPtrUnlock(record);										if (FrmCustomAlert(AltConfirmDelete, DBName, " ", " ") == 0)					{						RemoveDB(DBName);						FrmUpdateForm(FrmProjectList, frmUpdateTableCode);					}				}				handled = true;				break;			case MenuProjectListRename:				// if we have a selection				ProjectListHandleRename();				handled = true;				break;		}		handled = true;		break;	case ctlEnterEvent:		switch (e->data.ctlEnter.controlID)		{			case Btn_Scroll_Up:			case Btn_Scroll_Down:				// Reset scroll rate				ProjectListResetScrollRate();				// Clear lookup string//				PrvListClearLookupString ();				// leave unhandled so the buttons can repeat				break;		}		break;	case ctlRepeatEvent:		// Adjust the scroll rate if necessary		ProjectListAdjustScrollRate();		switch (e->data.ctlRepeat.controlID)		{			case Btn_Scroll_Up:				ProjectListScroll (winUp, ProjectList_Globals.ScrollUnits, false);				// leave unhandled so the buttons can repeat				break;				case Btn_Scroll_Down:				ProjectListScroll (winDown, ProjectList_Globals.ScrollUnits, false);				// leave unhandled so the buttons can repeat				break;			default:				break;		}		break;	case ctlSelectEvent:		switch(e->data.ctlSelect.controlID) {			case ProjectCategoryPopup:				SelectCategory();				handled = true;				break;			case Btn_List_New:				ProjectListHandleNew();				handled = true;				break;			case Btn_List_Open:				ProjectListHandleOpen();				handled = true;				break;			case Btn_List_Rename:				ProjectListHandleRename();				handled = true;				break;			default:				break;		}		break;	case tblSelectEvent://		// +++ FIX THIS +++ This is not compatible with PalmOS 3.1, and we don't need it yet//		if (TblRowMasked(e->data.tblSelect.pTable, e->data.tblSelect.row))//		{//			if (SecVerifyPW (showPrivateRecords) == true)//			{//				// We only want to unmask this one record, so restore the preference.//				PrefSetPreference (prefShowPrivateRecords, maskPrivateRecords);////				e->data.tblSelect.column = projectNameColumn; //force non-note view//			}//			else//			{//				handled=true;//				break;//			}//		}		{		UInt16 CurrentRecord;			CurrentRecord=ProjectListGetCurrentSelection();			// unless note icon, open the database			if (e->data.tblSelect.column == noteIconColumn)			{//				if (NoteViewCreate())//					FrmGotoForm (NewNoteView);			}			else				if ( ProjectList_Globals.LastSelectedRecord == CurrentRecord)					ProjectListHandleOpen();				ProjectList_Globals.LastSelectedRecord = CurrentRecord;		}		handled = true;		break;	case keyDownEvent:		// Address Book key pressed for the first time?		if (TxtCharIsHardKey(e->data.keyDown.modifiers, e->data.keyDown.chr))		{			if (! (e->data.keyDown.modifiers & poweredOnKeyMask))			{//				PrvListClearLookupString ();				ProjectListNextCategory ();			}			handled = true;			break;		}		switch (e->data.keyDown.chr)		{			case vchrPageUp:				// Reset scroll rate if not auto repeating				if ((e->data.keyDown.modifiers & autoRepeatKeyMask) == 0)				{					ProjectListResetScrollRate();				}				// Adjust the scroll rate if necessary				ProjectListAdjustScrollRate();				ProjectListScroll (winUp, ProjectList_Globals.ScrollUnits, false);//				PrvListClearLookupString ();				handled = true;				break;			case vchrPageDown:				// Reset scroll rate if not auto repeating				if ((e->data.keyDown.modifiers & autoRepeatKeyMask) == 0)				{					ProjectListResetScrollRate();				}				// Adjust the scroll rate if necessary				ProjectListAdjustScrollRate();				ProjectListScroll (winDown, ProjectList_Globals.ScrollUnits, false);//				PrvListClearLookupString ();				handled = true;				break;			case chrUpArrow:			case vchrPrevField: // handera support			{				Int16 rowSel;				Int16 colSel;				handled = true;				tblP=(TablePtr) FrmGetObjectPtr(frm,FrmGetObjectIndex(frm,ProjectListTable));				// if nothing currently selected, start at bottom				if (!TblGetSelection(tblP,&rowSel,&colSel))					rowSel=TblGetLastUsableRow(tblP);				else				{					if (--rowSel < 0)					{						ProjectListScroll (winUp, ProjectList_Globals.ScrollUnits, false);						ProjectListLoadTable(frm);						rowSel=TblGetLastUsableRow(tblP);					}				}				TblGlueSetSelection(tblP,rowSel,colSel);				FrmUpdateForm(FrmProjectList, frmRedrawTableCode);			}				break;			case chrDownArrow:			case vchrNextField: // Handera support			{				Int16 rowSel;				Int16 colSel;				handled = true;				tblP=(TablePtr) FrmGetObjectPtr(frm,FrmGetObjectIndex(frm,ProjectListTable));				// if nothing currently selected, start at bottom				if (!TblGetSelection(tblP,&rowSel,&colSel))					rowSel=0;				else				{					if (++rowSel > TblGetLastUsableRow(tblP))					{						ProjectListScroll (winDown, ProjectList_Globals.ScrollUnits, false);						ProjectListLoadTable(frm);						rowSel=0;					}				}				TblGlueSetSelection(tblP,rowSel,colSel);				FrmUpdateForm(FrmProjectList, frmRedrawTableCode);			}				break;			case chrCarriageReturn:			case chrLineFeed:				ProjectListHandleOpen();				handled = true;				break;							default:				// we don't want to deal with anything but normal chars				if (TxtGlueCharIsVirtual(e->data.keyDown.modifiers, e->data.keyDown.chr)) 					break;				if (TxtCharIsPrint (e->data.keyDown.chr))				{//                                    // +++ FIX THIS +++ this code causes problems, we pass should the char to ProjectListHandleNew					e->data.keyDown.chr = TxtGlueUpperChar(e->data.keyDown.chr);					EvtAddEventToQueue(e);					ProjectListHandleNew();					handled = true;				}				break;		}		break;	default:		break;	}	return handled;} // static Boolean FrmProjectListHandleEvent (EventPtr e)//Boolean HandleChooseNameButtonOK(void)UInt16 ShowChooseNameDialog(const Char *srcProjectName,Char destProjectName[dmDBNameLength]){	FormPtr frm;	UInt16 hitButton;	FieldPtr nameField;	Char *tempName;		frm=FrmInitForm(FrmChooseName);	nameField=GetObjectFromForm(frm,Fld_Project_Name);

⌨️ 快捷键说明

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