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

📄 contacts.c

📁 CD_《Palm OS编程实践》
💻 C
📖 第 1 页 / 共 4 页
字号:
		case fldEnterEvent:
			isDirty = true;
		break;
		
		// CH.3 Parse menu events
		case menuEvent:
			return( menuEventHandler( event ) );
		break;
	}

	// CH.2 We're done
	return( false );
}

// CH.4 Our About form event handler function
static Boolean aboutHandleEvent( EventPtr event )
{
	FormPtr		form;	// CH.4 A pointer to our form structure

	// CH.4 Get our form pointer
	form = FrmGetActiveForm();

	// CH.4 Respond to the Open event
	if( event->eType == frmOpenEvent )
	{
		// CH.4 Draw the form
		FrmDrawForm( form );
	}
	
	// CH.4 Return to the calling form
    if( event->eType == ctlSelectEvent )
    {
		FrmReturnToForm( 0 );
		
		// CH.4 Always return true in this case
		return( true );
	}
	
	// CH.4 We're done
	return( false );
}

// CH.6 Our Enter Time form event handler function
static Boolean enterTimeHandleEvent( EventPtr event )
{
	FormPtr				form;		// CH.6 A form structure pointer
	static DateTimeType	oldTime;	// CH.6 The original time

	// CH.6 Get our form pointer
	form = FrmGetActiveForm();

	// CH.6 Switch on the event
	switch( event->eType )
	{
		// CH.6 Initialize the form
		case frmOpenEvent:
		{
			// CH.6 Store the time value
			oldTime = dateTime;
			
			// CH.6 Draw it
			FrmDrawForm( form );
			
			// CH.6 Set the time controls
			setTimeControls();
		}
		break;
		
		// CH.6 If a button was repeated
		case ctlRepeatEvent:
		// CH.6 If a button was pushed
		case ctlSelectEvent:
		{
			Word	buttonID;	// CH.6 The ID of the button
		
			// CH.6 Set the ID
			buttonID = event->data.ctlSelect.controlID;
		
			// CH.6 Switch on button ID
			switch( buttonID )
			{
				// CH.6 Hours button
				case EnterTimeHoursPushButton:
				// CH.6 Minute Tens button
				case EnterTimeMinuteTensPushButton:
				// CH.6 Minute Ones button
				case EnterTimeMinuteOnesPushButton:
				{
					// CH.6 If no time was set
					if( dateTime.hour == NO_TIME )
					{
						// CH.6 Set the time to 12 PM
						dateTime.hour = 12;
						dateTime.minute = 0;
						
						// CH.6 Set the controls
						setTimeControls();
					}	
					
					// CH.6 Clear the old selection if any
					if( timeSelect )
						CtlSetValue( getObject( form, timeSelect ),
								false );
				
					// CH.6 Set the new selection
					CtlSetValue( getObject( form, buttonID ), true );
					timeSelect = buttonID;
				}	
				break;
				
				// CH.6 Up button
				case EnterTimeTimeUpRepeating:
				{
					// CH.6 If there's no time, do nothing
					if( dateTime.hour == NO_TIME )
						break;
					
					// CH.6 Based on what push button is selected
					switch( timeSelect )
					{
						// CH.6 Increase hours
						case EnterTimeHoursPushButton:
						{
							// CH.6 Increment hours
							dateTime.hour++;
							
							// CH.6 If it was 11 AM, make it 12 AM
							if( dateTime.hour == 12 )
								dateTime.hour = 0;
								
							// CH.6 If it was 11 PM, make it 12 PM
							if( dateTime.hour == 24 )
								dateTime.hour = 12;
						}
						break;
						
						// CH.6 Increase tens of minutes
						case EnterTimeMinuteTensPushButton:
						{
							// CH.6 Increment minutes
							dateTime.minute += 10;
							
							// CH.6 If it was 5X, roll over
							if( dateTime.minute > 59 )
								dateTime.minute -= 60;
						}
						break;
						
						// CH.6 Increase minutes
						case EnterTimeMinuteOnesPushButton:
						{
							// CH.6 Increment minutes
							dateTime.minute++;
							
							// CH.6 If it is zero, subtract ten
							if( (dateTime.minute % 10) == 0 )
								dateTime.minute -= 10;
						}
						break;
					}
					
					// Revise the controls
					setTimeControls();
				}
				break;
				
				// CH.6 Down button
				case EnterTimeTimeDownRepeating:
				{
					
					// CH.6 If there's no time, do nothing
					if( dateTime.hour == NO_TIME )
						break;
					
					// CH.6 Based on what push button is selected
					switch( timeSelect )
					{
						// CH.6 Decrease hours
						case EnterTimeHoursPushButton:
						{
							// CH.6 Decrement hours
							dateTime.hour--;
							
							// CH.6 If it was 12 AM, make it 11 AM
							if( dateTime.hour == -1 )
								dateTime.hour = 11;
								
							// CH.6 If it was 12 PM, make it 11 PM
							if( dateTime.hour == 11 )
								dateTime.hour = 23;
						}
						break;
						
						// CH.6 Decrease tens of minutes
						case EnterTimeMinuteTensPushButton:
						{
							// CH.6 Decrement minutes
							dateTime.minute -= 10;
							
							// CH.6 If it was 0X, roll over
							if( dateTime.minute < 0 )
								dateTime.minute += 60;
						}
						break;
						
						// CH.6 Decrease minutes
						case EnterTimeMinuteOnesPushButton:
						{
							// CH.6 Decrement minutes
							dateTime.minute--;
							
							// CH.6 If it is 9, add ten
							if( (dateTime.minute % 10) == 9 )
								dateTime.minute += 10;
								
							// CH.6 If less than zero, make it 9
							if( dateTime.minute < 0 )
								dateTime.minute = 9;
						}
						break;
					}
					
					// CH.6 Revise the controls
					setTimeControls();
				}
				break;
								
				// CH.6 AM button
				case EnterTimeAMPushButton:
				{
					// CH.6 If no time was set
					if( dateTime.hour == NO_TIME )
					{
						// CH.6 Set the time to 12 AM
						dateTime.hour = 0;
						dateTime.minute = 0;
						
						// CH.6 Set the controls
						setTimeControls();
					}	
					
					// CH.6 If it is PM
					if( dateTime.hour > 11 )
					{
						// CH.6 Change to AM
						dateTime.hour -= 12;
						
						// CH.6 Set the controls
						setTimeControls();
					}
				}
				break;
				
				// CH.6 PM button
				case EnterTimePMPushButton:
				{
					// CH.6 If no time was set
					if( dateTime.hour == NO_TIME )
					{
						// CH.6 Set the time to 12 PM
						dateTime.hour = 12;
						dateTime.minute = 0;
						
						// CH.6 Set the controls
						setTimeControls();
					}	
					
					// CH.6 If it is AM
					if( dateTime.hour < 12 )
					{
						// CH.6 Change to PM
						dateTime.hour += 12;
						
						// CH.6 Set the controls
						setTimeControls();
					}
				}
				break;
				
				// CH.6 No Time checkbox
				case EnterTimeNoTimeCheckbox:
				{
					// CH.6 If we are unchecking the box
					if( dateTime.hour == NO_TIME )
					{
						// CH.6 Set the time to 12 PM
						dateTime.hour = 12;
						dateTime.minute = 0;
						
						// CH.6 Set the controls
						setTimeControls();

						// CH.6 Set the new selection
						timeSelect = EnterTimeHoursPushButton;
						CtlSetValue( getObject( form, timeSelect ),
								true );
					}
					
					else
					// CH.6 If we are checking the box
						dateTime.hour = NO_TIME;
					
					// CH.6 Set the controls
					setTimeControls();
				}
				break;
				
				// CH.6 Cancel button
				case EnterTimeCancelButton:
				{
					// CH.6 Restore time
					dateTime = oldTime;
					
					// CH.6 Return to calling form
					FrmReturnToForm( 0 );
				}
				// CH.6 Always return true
				return( true );
					
				// CH.6 OK button
				case EnterTimeOKButton:
				{
					VoidPtr	precord;	// CH.6 Points to the record
			
					// CH.6 Lock it down
					precord = MemHandleLock( hrecord );
					
					// CH.6 Write the date time field
					DmWrite( precord, DB_DATE_TIME_START, &dateTime,
							sizeof( DateTimeType ) );
				
					// CH.6 Unlock the record
					MemHandleUnlock( hrecord );
					
					// CH.6 Mark the record dirty
					isDirty = true;
			
					// CH.6 Return to the Contact Details form
					FrmReturnToForm( 0 );

					// CH.6 Update the field
					setTimeTrigger();
				}
				// CH.6 Always return true
				return( true );
			}
		}
		break;
	}
	
	// CH.6 We're done
	return( false );
}
		
// CH.7 Our Contact List form event handler function
static Boolean contactListHandleEvent( EventPtr event )
{
	FormPtr	form;		// CH.7 A form structure pointer
	Char	catName[dmCategoryLength];	// CH.9 Category name

	// CH.7 Get our form pointer
	form = FrmGetActiveForm();

	// CH.7 Parse events 
	switch( event->eType )
	{
		// CH.7 Form open event
		case frmOpenEvent:
		{
			// CH.7 Draw the form	
			FrmDrawForm( form );
			
			// CH.9 Set the category popup trigger label
			CategoryGetName( contactsDB, listCat, catName );
			CategorySetTriggerLabel( getObject( form,
					ContactListCategoryPopupPopTrigger ),
					catName );
			
			// CH.8 The cursor starts at the beginning
			cursor = 0;
			
			// CH.9 Initialize the table indexes
			initIndexes();
			
			// CH.8 Populate and draw the table
			drawTable();			
		}
		break;
	
		// CH.7 Respond to a list selection
		case tblSelectEvent:
		{
			// CH.7 Set the database cursor to the selected contact
			cursor = tableIndex[event->data.tblSelect.row];
			
			// CH.7 Go to contact details
			FrmGotoForm( ContactDetailForm );
		}
		break;
		
		// CH.7 Respond to a menu event
		case menuEvent:
			return( menuEventHandler( event ) );

		// CH.7 Respond to the popup trigger
		case popSelectEvent:
		{
			// CH.7 If there is no change, we're done
			if( sortBy == event->data.popSelect.selection )
				return( true );
			
			// CH.7 Modify sort order variable
			sortBy = event->data.popSelect.selection;
			
			// CH.7 Sort the contact database by the new criteria
			DmQuickSort( contactsDB, (DmComparF*)sortFunc, sortBy );

			// CH.8 Cursor starts at zero
			cursor = 0;
			
			// CH.9 Initialize the table indexes
			initIndexes();

			// CH.8 Rebuild the table
			drawTable();
		}
		break;
		
		// CH.8 Respond to arrows
		case ctlRepeatEvent:
		{
			switch( event->data.ctlRepeat.controlID )
			{
				// CH.8 Up arrow
				case ContactListRecordUpRepeating:
					scrollIndexes( -1 );
				break;
				
				// CH.8 Down arrow
				case ContactListRecordDownRepeating:
					scrollIndexes( 1 );
				break;
			}
			
			// CH.8 Now refresh the table
			drawTable();
		}
		break;
		
		// CH.8 Respond to up and down arrow hard keys
		case keyDownEvent:
		{
			switch( event->data.keyDown.chr )
			{
				// CH.8 Up arrow hard key
				case pageUpChr:
					scrollIndexes( -(TABLE_NUM_ROWS - 1) );
				break;
				
				// CH.8 Down arrow hard key
				case pageDownChr:
					scrollIndexes( TABLE_NUM_ROWS - 1 );
				break;
			}
			
			// CH.8 Now refresh the table
			drawTable();
		}
		break;
		
		// CH.8 Respond to scrollbar events
		case sclExitEvent:
		{
			//CH.9 Find the record in our category
			cursor = findIndex( event->data.sclExit.newValue );
			
			// CH.9 Initialize our index list
			initIndexes();
			
			// CH.8 Draw the table
			drawTable();
		}
		break;
		
		// CH.9 Catch a tap on the category trigger
		case ctlSelectEvent:
		{
			// CH.9 Palm OS will present the popup list for us.
			CategorySelect( contactsDB, form,
					ContactListCategoryPopupPopTrigger,
					ContactListCategoryListList,
					true, &listCat, catName, 1, 0 );

			// CH.9 Cursor starts at zero
			cursor = 0;
				
			// CH.9 Initialize the indexes
			initIndexes();
				
			// CH.9 Draw the table
			drawTable();
		}
		// CH.9 Don't let the OS generate other events from this
		return( true );
		
	}	// CH.7 End of the event switch statement
	
	// CH.7 We're done
	return( false );
}

// CH.3 Handle menu events
Boolean menuEventHandler( EventPtr event )

⌨️ 快捷键说明

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