📄 calltoda.c
字号:
/* CallToDA * Find phone# info from Address database (Desk Accessory) * * by TERADA, Koichi * email: kterada@iname.com * web: http://www04.u-page.so-net.ne.jp/zd5/kterada/ * Jan. 2000 */#include <Pilot.h>#include <Common.h>#include <System/SysAll.h>#include <UI/UIAll.h>#include <Hardware/Hardware.h>#include "CallToDA.h"#include "CallToDA_res.h"/* Internal Functions prototyping */static void initParam( Param *param );static void showSearchDialog( Param *param );static void showMainDialog( Param *param, Char *buttonLabel );static Boolean EventMainLoop( Param * );static Boolean HandleMainEvent(EventPtr, Param *);static Boolean IsInside(RectanglePtr, SWord, SWord);static Boolean IsOutside(RectanglePtr, SWord, SWord);static void ExorFrame(Word, Word);static CharPtr copyButtonLabel( CharPtr, Word, Word );static void switchFormBitmaps( FormPtr, Word );static void formSetHelpResource( FormPtr, Word );static void showObject( FormPtr, Word );static void hideObject( FormPtr, Word );static void showMoreOptionControls( FormPtr );static void showOptionControls( FormPtr, Param * );static void showMainControls( FormPtr, Param * );static void setCompanyTitleFlags( Param *param );static void ctrlButton( Param *, FormPtr, Word, AddressPhoneLabels );static void showCtrlButtons( Param *, FormPtr );static void frmSetObjectValue( FormPtr, Word, Boolean);static void frmSetPopTriggerLabel( FormPtr form, Word listId, Word triggerId, Word item );static void setAndDrawFields( Param * );static void getSelectedButtonLabel( CharPtr buttonLabel, Param *param );static void CopyClipboard( Param *param );void displayNextIndicate( UInt index );void initIndicate( void );static Word showInputDialog( Param *param );static Boolean EventInputLoop( Param *param );static Boolean HandleInputEvent(EventPtr event, Param *param);static Boolean copyFieldToBuf( Param *param );/* End of Header */void start(){ FormPtr orgForm; VoidHand handle; Param *param; DWord featureValue;// int i; Boolean launchAddrAppl; Word rec; ULong creator; Char *applName; Char buttonLabel[MAX_BTN_TXT];// FieldPtr fieldptr; Word strLen; orgForm = FrmGetActiveForm(); if( PrefGetPreference(prefDeviceLocked) ) return; if( FtrGet( CallToAppID, 0, &featureValue ) == 0 ) { FrmAlert( QuitAlert ); return; } FtrSet( CallToAppID, 0, 0 ); handle = MemHandleNew( sizeof( Param )); param = MemHandleLock( handle ); LoadFromPrefs( param ); initParam( param ); param->disableInsert = false; param->noInsertField = false; param->rootWindow = WinGetDisplayWindow(); setCompanyTitleFlags( param ); param->dbP = DmOpenDatabaseByTypeCreator( Address_Type, Address_AppID, dmModeReadOnly ); if( param->dbP != 0 ) { strLen = getSelectedText( param->src, param ); if( strLen <= 0 ) { strLen = showInputDialog( param ); if( param->fieldptr == NULL ) { param->noInsertField = true; }// if( strLen <= 0 )// FrmAlert( NoselectionAlert ); } if( strLen > 0 ) { do { /* Init parameteres */ initParam( param ); /* show "searching" dialog */ showSearchDialog( param ); if( param->indexNum == 0 || param->noInsertField ) { param->disableInsert = true; } else { param->disableInsert = false; } /* show main dialog */ showMainDialog( param, buttonLabel ); } while( param->searchAgain ); /*{ char buf[20]; StrIToA( buf, param->indexNum ); FrmCustomAlert( MsgAlert, "param->indexNum", buf, " " ); } */ if( !param->disableInsert && param->insert && param->indexNum > 0 ) { char temp[MAX_TEXT * 2]; /*{ char buf[20]; StrIToA( buf, StrLen(param->buf2) ); FrmCustomAlert( MsgAlert, "StrLen(param->buf2)", buf, " " ); }*/ FrmSetActiveForm( orgForm ); reformatPastableText( temp, buttonLabel, param ); putSelectedText( temp, param ); } } DmCloseDatabase( param->dbP ); } launchAddrAppl = param->launchAddrAppl; rec = param->indexList[ param->index ]; switch( param->p.launchAppl ) { case LAUNCH_ADDR_J: creator = Address_AppID_AddressJ; applName = Address_AppName_AddressJ; break; case LAUNCH_ADDR_PLUS: creator = Address_AppID_AddressPlus; applName = Address_AppName_AddressPlus; break; case LAUNCH_SUPERNAMES: creator = Address_AppID_SuperNames; applName = Address_AppName_SuperNames; break; case LAUNCH_TEALPHONE: creator = Address_AppID_TealPhone; applName = Address_AppName_TealPhone; break; case LAUNCH_ADDR_ORG: default: creator = sysFileCAddress; applName = "Address"; break; } SaveToPrefs( param ); MemHandleUnlock( handle ); MemHandleFree( handle ); FtrUnregister( CallToAppID, 0 ); if( launchAddrAppl ) { launchAddress( rec, creator, applName ); }}static void initParam( Param *param ){ int i; param->index = 0; param->searchAgain = false; param->indicateStatus = 0; param->optionControl = MAIN_FORM; *(param->buf1) = *(param->buf2) = '\0'; param->moving = false; param->insert = false; param->launchAddrAppl = false; param->mode = -1; param->modeNum = -1; for( i = 0 ; i < numPhoneLabels ; i ++ ) { param->availPhone[i] = false; } return;}static void showSearchDialog( Param *param ){ FieldPtr fieldptr; FormPtr form; form = FrmInitForm( SearchingForm ); FrmSetActiveForm( form ); fieldptr = FrmGetObjectPtr(form, FrmGetObjectIndex(form, searchingSearchTextField)); FldSetTextPtr(fieldptr, param->src); FldRecalculateField(fieldptr, true); FrmDrawForm( form ); param->indexNum = FindAddrDB( param ); FrmEraseForm( form ); FrmDeleteForm( form ); if( param->indexNum >= MAX_ADDR_LIST ) FrmAlert( TooManyRecordsFoundAlert ); return;}static void showMainDialog( Param *param, Char *buttonLabel ){ FormPtr form; form = FrmInitForm( MainForm ); form->window.windowBounds.topLeft.x = param->p.lastX; form->window.windowBounds.topLeft.y = param->p.lastY; FrmSetActiveForm( form ); formSetHelpResource( form, helpString );// if( param->indexNum == 0 ) {// FrmAlert( NomatchAlert );// } showMainControls( form, param ); setAndDrawFields( param ); EventMainLoop( param ); getSelectedButtonLabel( buttonLabel, param ); FrmEraseForm( form ); FrmDeleteForm( form ); return;}static Boolean EventMainLoop( Param *param ){ EventType event; Word error; Boolean done = false; do { EvtGetEvent (&event, evtWaitForever); if (! SysHandleEvent (&event)) if (! MenuHandleEvent (NULL, &event, &error)) { if ( param->moving || event.eType == menuEvent || event.eType == popSelectEvent || !FrmHandleEvent(FrmGetActiveForm(), &event)) { done = HandleMainEvent(&event, param); } } } while ((event.eType != appStopEvent) && !done); return done;}static Boolean HandleMainEvent(EventPtr event, Param *param){ Boolean handled = false; Boolean done = false; FormPtr form; SWord moveX, moveY; form = FrmGetActiveForm(); switch (event->eType) { case appStopEvent: EvtAddEventToQueue(event); done= true; handled = true; break; case ctlSelectEvent: switch (event->data.ctlSelect.controlID) { case mainButtonDoneButton: done= true; handled = true; break; case mainAgainButton: param->searchAgain = true; done= true; handled = true; break; case mainButtonInsertButton: param->insert = true; done= true; handled = true; break; case mainButtonOptionButton: param->optionControl = OPTION_FORM; formSetHelpResource( form, helpOptionString ); showOptionControls( form, param ); //param->MenuP = MenuSetActiveMenu( NULL ); setAndDrawFields( param ); handled = true; break; case mainButtonOKButton: if( param->optionControl == OPTION_FORM ) { param->optionControl = MAIN_FORM; formSetHelpResource( form, helpString ); showMainControls( form, param ); //MenuSetActiveMenu( param->MenuP ); } else { param->optionControl = OPTION_FORM; formSetHelpResource( form, helpOptionString ); showOptionControls( form, param ); } setAndDrawFields( param ); handled = true; break; case mainMoreButton: param->optionControl = MORE_FORM; formSetHelpResource( form, helpSearchString ); showMoreOptionControls( form ); setAndDrawFields( param ); handled = true; break; case mainNameFormat0PushButton: // First param->p.includeLastname = false; param->p.swapFirstLast = false; param->p.omitComma = false; setAndDrawFields( param ); handled = true; break; case mainNameFormat1PushButton: // Last, First param->p.includeLastname = true; param->p.swapFirstLast = true; param->p.omitComma = false; setAndDrawFields( param ); handled = true; break; case mainNameFormat2PushButton: // First Last param->p.includeLastname = true; param->p.swapFirstLast = false; param->p.omitComma = false; setAndDrawFields( param ); handled = true; break; case mainNameFormat3PushButton: // Last First param->p.includeLastname = true; param->p.swapFirstLast = true; param->p.omitComma = true; setAndDrawFields( param ); handled = true; break;/* case mainCheckbox_includeCheckbox: param->p.includeLastname = event->data.ctlSelect.on; setAndDrawFields( param ); handled = true; break; case mainCheckbox_swapCheckbox: param->p.swapFirstLast = event->data.ctlSelect.on; setAndDrawFields( param ); handled = true; break; case mainNoCommaCheckbox: param->p.omitComma = event->data.ctlSelect.on; setAndDrawFields( param ); handled = true; break;*/ case mainPasteTypeCheckbox: param->p.pasteType = event->data.ctlSelect.on; setAndDrawFields( param ); handled = true; break; case mainPasteCompanyCheckbox: param->pasteCompany = event->data.ctlSelect.on; setAndDrawFields( param ); handled = true; break; case mainPasteTitleCheckbox: param->pasteTitle = event->data.ctlSelect.on; setAndDrawFields( param ); handled = true; break;// case mainJapaneseCheckbox:// param->p.japanese = event->data.ctlSelect.on;// setAndDrawFields( param );// handled = true;// break; case mainLangUSPushButton: param->p.language = LANG_US; setAndDrawFields( param ); handled = true; break; case mainLangJPPushButton: param->p.language = LANG_JP; setAndDrawFields( param ); handled = true; break; case mainLangEUPushButton: param->p.language = LANG_EU; setAndDrawFields( param ); handled = true; break; /* case mainAltStrstriCheckbox: param->p.altStrstri = event->data.ctlSelect.on; setAndDrawFields( param ); handled = true; break; */ case mainIgnoreCaseCheckbox: param->p.ignoreCase = event->data.ctlSelect.on; setAndDrawFields( param ); handled = true; break; case mainFindNameCompanyCheckbox: param->p.findNameCompany = event->data.ctlSelect.on; setAndDrawFields( param ); handled = true; break; case mainFindPhonesCheckbox: param->p.findPhones = event->data.ctlSelect.on; setAndDrawFields( param ); handled = true; break; case mainFindAddressCheckbox: param->p.findAddress = event->data.ctlSelect.on; setAndDrawFields( param ); handled = true; break; case mainFindCustomsCheckbox: param->p.findCustoms = event->data.ctlSelect.on; setAndDrawFields( param ); handled = true; break; case mainFindNoteCheckbox: param->p.findNote = event->data.ctlSelect.on; setAndDrawFields( param ); handled = true; break; case mainButtonUpButton: if( param->index > 0 ) { param->index --; } param->mode = param->modeNum = -1; setAndDrawFields( param ); handled = true; break; case mainButtonDownButton: if( param->index + 1 < param->indexNum ) { param->index ++; } param->mode = param->modeNum = -1; setAndDrawFields( param ); handled = true; break; case mainButtonWPushButton: if( event->data.ctlSelect.on ) { if( param->mode == workLabel ) param->modeNum ++; else param->modeNum = -1; param->mode = workLabel; } else { param->mode = 0; } setAndDrawFields( param ); handled = true; break; case mainButtonHPushButton: if( event->data.ctlSelect.on ) { if( param->mode == homeLabel ) param->modeNum ++; else param->modeNum = -1; param->mode = homeLabel; } else { param->mode = 0; } setAndDrawFields( param ); handled = true; break; case mainButtonMoPushButton: if( event->data.ctlSelect.on ) { if( param->mode == mobileLabel ) param->modeNum ++; else param->modeNum = -1; param->mode = mobileLabel; } else { param->mode = 0; } setAndDrawFields( param ); handled = true; break; case mainButtonMaPushButton: if( event->data.ctlSelect.on ) { if( param->mode == mainLabel ) param->modeNum ++; else param->modeNum = -1; param->mode = mainLabel; } else { param->mode = 0; } setAndDrawFields( param ); handled = true; break; case mainButtonOPushButton: if( event->data.ctlSelect.on ) { if( param->mode == otherLabel ) param->modeNum ++; else param->modeNum = -1; param->mode = otherLabel; } else { param->mode = 0; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -