home *** CD-ROM | disk | FTP | other *** search
Text File | 1995-04-30 | 18.0 KB | 705 lines | [TEXT/MPCC] |
- //----------------------------------------------------------------------------------------
- // UI Events protocol
- //----------------------------------------------------------------------------------------
-
- #ifndef _CREDITNOWDEMO_
- #include "CPCreditNowDemo.h"
- #endif
-
- #ifndef __CONTROLS__
- #include <Controls.h>
- #endif
-
- #include <stdio.h>
- #include <AEBuild.h>
- #include <AEPrint.h>
- #include "ValidationSuite.h"
- #include "Launchit.h"
-
- //----------------------------------------------------------------------------------------
-
- ODBoolean CPCreditNowDemo::HandleEvent(Environment* ev, ODEventData* event,
- ODFrame* frame, ODFacet* facet,
- ODEventInfo* eventInfo)
- {
- // CodeWarrior: Cmd-Click or Search:Find Definition • Explain_HandleEvent
- EnteringMethod("\pCPCreditNowDemo::HandleEvent");
- ODUnused(eventInfo);
-
- ODBoolean tWasHandled = kODFalse;
-
- switch ( event->what )
- {
- case nullEvent:
- if (::IsDialogEvent((EventRecord *)event))
- {
- short itemHit;
- DialogPtr dialog;
- tWasHandled = ::DialogSelect((EventRecord *)event, &dialog, &itemHit);
- return tWasHandled;
- }
- //AET<<
- {
- CFocus foc(ev, fFacet);
- (fCurrentField->GetTextField())->Idle();
- }
- //AET>>
- tWasHandled = kODTrue;
- break;
-
- case mouseDown:
- tWasHandled = this->PrivHandleMouseDown(ev, event, frame, facet);
- break;
-
- case kODEvtMouseDownEmbedded:
- case mouseUp:
- tWasHandled = kODTrue;
- break;
-
- //AET<<
- case activateEvt:
- {
- CFocus foc(ev, fFacet);
- if (event->modifiers & activeFlag)
- (fCurrentField->GetTextField())->Activate();
- else
- (fCurrentField->GetTextField())->Deactivate();
- }
- tWasHandled = kODTrue;
- break;
-
- case keyDown:
- case autoKey:
- {
- char inKey = event->message & charCodeMask;
- TextField *aField = fCurrentField->GetTextField();
-
- switch (inKey)
- {
- case chTab: // go to next field
- this->TabToField(ev, event, frame, facet);
- break;
-
- case chEnter: //execute
- case chReturn:
- this->Authorize(ev);
- break;
-
- default:
- {
- CFocus foc(ev, fFacet);
- aField->KeyStroke(inKey, event->modifiers);
- }
- break;
- }
- tWasHandled = kODTrue;
- }
- break;
- //AET>>
-
- case kODEvtMenu:
- tWasHandled = this->PrivHandleMenuEvent(ev, frame, event );
- break;
-
- default:
- break;
- }
-
- return tWasHandled;
- }
-
- //----------------------------------------------------------------------------------------
-
- void CPCreditNowDemo::AdjustMenus(Environment* ev, ODFrame* frame)
- {
- // CodeWarrior: Cmd-Click or Search:Find Definition • Explain_AdjustMenus
- EnteringMethod("\pCPCreditNowDemo::AdjustMenus");
- ODUnused(frame);
-
- Str63 aboutText;
- ODIText* odiText;
-
- fMenuBar->EnableCommand(ev, kODCommandViewAsWin, !frame->IsRoot(ev) );
- fMenuBar->EnableCommand(ev, kODCommandGetPartInfo, kODTrue);
-
- {
- CUsingLibraryResources fil;
- ::GetIndString(aboutText, kContentStringResID, kAboutTextID);
- }
-
- ODScriptCode script = ::GetScriptManagerVariable(smSysScript);
- ODLangCode lang = ::GetScriptVariable(script, smScriptLang);
- odiText = CreateIText(script, lang, aboutText);
- fMenuBar->SetItemString(ev, kODCommandAbout, odiText);
- DisposeIText(odiText);
- //AET<<
- Boolean selection;
- selection = fCurrentField->GetTextField()->HaveSelection();
- // fMenuBar->EnableCommand(ev, kODCommandCut, selection);
- // fMenuBar->EnableCommand(ev, kODCommandCopy, selection);
- fMenuBar->EnableCommand(ev, kODCommandClear, selection);
-
- // Boolean canPaste = ValueOnClipboard(ev, kODASCIIText, fSession);
- // fMenuBar->EnableCommand(ev, kODCommandPaste, selection);
- //AET>>
- }
-
- //----------------------------------------------------------------------------------------
-
- ODSession* gSession;
-
- ODBoolean CPCreditNowDemo::PrivHandleMenuEvent(Environment* ev, ODFrame* frame, ODEventData* event)
- {
- EnteringMethod("\pCPCreditNowDemo::PrivHandleMenuEvent");
- ODUnused(frame);
-
- long menuResult = event->message;
- short menu = HiWord(menuResult);
- short item = LoWord(menuResult);
-
- if (menu) {
-
- switch( fMenuBar->GetCommand(ev, menu, item) )
- {
- case kODCommandAbout:
- {
- CUsingLibraryResources fil;
-
- if (fSession->GetArbitrator(ev)->RequestFocus(ev, fModalFocus, frame))
- {
- ::SetCursor(&ODQDGlobals.arrow);
- gSession = fSession; // DialogFilter uses this!
- ModalFilterUPP modalFilter = NewModalFilterProc(MyDialogFilter);
- ::Alert(kCreditNowDemoAboutBoxID, modalFilter);
- DisposeRoutineDescriptor(modalFilter);
- fSession->GetArbitrator(ev)->RelinquishFocus(ev, fModalFocus,frame);
- }
- else
- ::SysBeep(1);
- }
- break;
-
- #if 0
- //AET<<
- case kODCommandCut:
- this->DoCut(ev, frame);
- break;
-
- case kODCommandCopy:
- this->DoCopy(ev, frame);
- break;
-
- case kODCommandPaste:
- this->DoPaste(ev, frame, kODNULL, kODNULL);
- break;
- #endif
- case kODCommandNew:
- for ( TextFieldLink *fl = fTextFields.First(); fl->GetTextField(); fl = fl->Next() )
- {
- (fl->GetTextField())->SetText("\p");
- }
- this->PrivInvalAllDisplayFrames(ev);
- this->SelectFirstField(ev, kODNULL);
- break;
-
- case kODCommandClear:
- fCurrentField->GetTextField()->Clear();
- break;
- //AET>>
-
- case kODCommandViewAsWin:
- this->Open(ev, frame);
- break;
-
- case kODCommandGetPartInfo:
- ODFrameFacetIterator* facets = frame->CreateFacetIterator(ev);
- fSession->GetInfo(ev)->ShowPartFrameInfo(ev, facets->First(ev), kODFalse);
- break;
-
- default:
- return kODFalse;
- }
- }
-
- return kODTrue;
- }
-
- //------------------------------------------------------------------------------
-
- ODBoolean CPCreditNowDemo::PrivHandleMouseDown(Environment* ev, ODEventData* event,
- ODFrame* frame, ODFacet* facet)
- {
- EnteringMethod("\pCPCreditNowDemo::PrivHandleMouseDown");
-
- ODBoolean handled = kODFalse;
-
- if (facet == kODNULL) // Did we get a click outside a modal dialog? …
- {
- ::SysBeep(1);
- return kODTrue; // Return that click was handled.
- }
-
- // Activate the window if it is not active…
- if (! facet->GetWindow(ev)->IsActive(ev))
- {
- // select the window
- facet->GetWindow(ev)->Select(ev);
-
- // typically you continue handling the event, if not, just return kODTrue
- handled = kODTrue;
-
- // return kODTrue; // user needs to click twice to get something done
- }
-
- // dialog events first
- if (::IsDialogEvent((EventRecord *)event))
- {
- short itemHit;
- DialogPtr dialog;
-
- handled = ::DialogSelect((EventRecord *)event, &dialog, &itemHit);
- ODWindow* window = fSession->GetWindowState(ev)->GetODWindow(ev, dialog);
- return handled; // In preparation for more "if" cases to be added below.
- }
-
- // get the mouse in local coordinates
- ODWindow* odwnd = frame->GetWindow(ev);
- ODPoint odPoint;
- GetWindowPoint(odwnd, ev, event->where, &odPoint);
-
- // test for click in grow box, if appropriate
- if (frame->IsRoot(ev))
- {
- WindowPtr wnd = (WindowPtr)odwnd->GetPlatformWindow(ev);
-
- Rect r = wnd->portRect;
- r.left = r.right - 15;
- r.top = r.bottom - 15;
- if (::PtInRect(odPoint.AsQDPoint(), &r)) {
- ::SetRect(&r, 200, 200, 20000, 20000);
- long newWindowSize = ::GrowWindow(wnd, event->where, &r);
- ::SizeWindow(wnd, LoWord(newWindowSize), HiWord(newWindowSize), true);
- odwnd->AdjustWindowShape(ev);
- return kODTrue;
- }
- }
-
- if ( fSession->GetArbitrator(ev)->RequestFocusSet(ev, fFocusSet,frame) )
- {
- // Try to grab all of our foci…
- this->FocusAcquired(ev, fSelectionFocus, frame);
- this->FocusAcquired(ev, fMenuFocus, frame);
- this->FocusAcquired(ev, fKeyFocus, frame);
-
- } else {
- // We couldn't get focus we requested, so bail.
- // Alternatively, parts of functionality can be disabled.
- return kODFalse;
- }
-
- // Handle clicks in used shape…
- odPoint = facet->GetWindowContentTransform(ev, kODNULL)->InvertPoint(ev, &odPoint);
-
- ODShape* usedShape = this->PrivGetUsedShape(ev, frame);
- ODBoolean hit = usedShape->ContainsPoint(ev, &odPoint);
- usedShape->Release(ev);
-
- //AET(original hit testing does not work) if (hit)
- //AET(so ignore it)
- if (hit)
- handled = this->PrivUsedShapeHandleMouseDown(ev, event, frame, facet);
-
- return handled;
- }
-
- //------------------------------------------------------------------------------
-
- ODBoolean CPCreditNowDemo::PrivUsedShapeHandleMouseDown(Environment* ev,
- ODEventData* event, ODFrame* frame, ODFacet* facet)
- {
- EnteringMethod("\pCPCreditNowDemo::PrivUsedShapeHandleMouseDown");
-
- // Get the window and platform window (i.e. WindowPtr)…
- ODWindow* odwnd = frame->GetWindow(ev);
- ODPlatformWindow facetPort = odwnd->GetPlatformWindow(ev);
-
- // Get the mouse in window-local and facet-local coordinates…
- ODPoint windowPoint;
- GetWindowPoint(odwnd, ev, event->where, &windowPoint);
- ODPoint facetPoint =
- facet->GetWindowContentTransform(ev, kODNULL)->InvertPoint(ev, &windowPoint);
-
- // Handle the click in whatever way is appropriate…
- //AET<<
- {
- CFocus foc(ev, facet);
-
- Point macPoint = facetPoint.AsQDPoint();
-
- short ctlPart = ::FindControl(macPoint, facetPort, &fAuthButton);
- if (ctlPart == kInButtonControlPart)
- {
- if (::TrackControl(fAuthButton, macPoint, nil) != 0)
- {
- this->Authorize(ev);
- return kODTrue; // We handled the click.
- }
- }
- else
- {
- Boolean found = false;
-
- for ( TextFieldLink *fl = fTextFields.First(); fl->GetTextField(); fl = fl->Next() )
- if ( (fl->GetTextField())->ContainsPoint(macPoint) )
- {
- found = true;
- break;
- }
- if (found)
- {
- if (fl == fCurrentField)
- (fl->GetTextField())->MouseClick(macPoint, event);
- else
- {
- fCurrentField->GetTextField()->Deactivate();
- fCurrentField = fl;
- fCurrentField->GetTextField()->Activate();
- }
- return kODTrue; // We handled the click.
- }
- }
- }
- return kODFalse; // We handled the click.
- //AET>>
- }
-
-
-
-
- //AET<<
-
- //----------------------------------------------------------------------------------------
-
- void pstrcpy(Str255 dest, Str255 source);
- void pstrcpy(Str255 dest, Str255 source)
- {
- ::BlockMove(&source[0], &dest[0], source[0]+1);
- }
-
-
- //----------------------------------------------------------------------------------------
- void CPCreditNowDemo::TabToField(Environment* ev, ODEventData* event,
- ODFrame* frame, ODFacet* facet)
- {
- char inKey = event->message & charCodeMask;
- TextField *aField = fCurrentField->GetTextField();
- TextFieldLink *nextField;
-
- if ( !aField->Validate() ) // Verify valid field contents
- return; //contents not valid
-
- if ((event->modifiers & shiftKey) == shiftKey)
- {
- nextField = fCurrentField->Previous();
- while ( kODNULL == nextField->GetTextField() )
- nextField = nextField->Previous();
- }
- else
- {
- nextField = fCurrentField->Next();
- while ( kODNULL == nextField->GetTextField() )
- nextField = nextField->Next();
- }
- this->SelectField(ev, facet, nextField);
- }
-
- //----------------------------------------------------------------------------------------
-
- void CPCreditNowDemo::SelectField(Environment* ev, ODFacet* facet, TextFieldLink *nextField)
- {
- if (kODNULL == facet)
- {
- facet = fFacet;
- }
- if (facet)
- {
- CFocus foc(ev, facet);
- (fCurrentField->GetTextField())->Deactivate();
- fCurrentField = nextField;
- (fCurrentField->GetTextField())->SetSelection(0,32000);
- (fCurrentField->GetTextField())->Activate();
- }
- }
-
- //----------------------------------------------------------------------------------------
-
- void CPCreditNowDemo::SelectFirstField(Environment* ev, ODFacet* facet)
- {
- if (kODNULL == facet)
- {
- facet = fFacet;
- }
- if (facet)
- {
- CFocus foc(ev, facet);
- //set active field to first field
- (fCurrentField->GetTextField())->Deactivate();
- fCurrentField = fTextFields.First();
- (fCurrentField->GetTextField())->Activate();
- (fCurrentField->GetTextField())->SetSelection(0,32000);
- }
- }
-
- //----------------------------------------------------------------------------------------
-
- void CPCreditNowDemo::Authorize(Environment* ev)
- {
- Handle amount = nil;
- Handle account = nil;
- Handle expiration = nil;
- long length;
-
- OSType cnSignature = 'CNOW';
- AppleEvent event, reply;
- AEAddressDesc target;
- AppleEvent theAppleEvent;
- OSErr err;
-
- ODTypeToken aToken;
- ODTypeToken amtToken;
- ODTypeToken expToken;
- ODTypeToken acctToken;
-
-
- //clear response fields
- fAuthorization->SetText("\p");
- fAddressVerify->SetText("\pPending…");
- this->Draw(ev, fFacet, kODNULL);
-
- //set active field to first field
- this->SelectFirstField(ev, kODNULL);
-
- amtToken = fSession->Tokenize(ev, kAmountTextField); // 6
- expToken = fSession->Tokenize(ev, kExpirationTextField); // 5
- acctToken = fSession->Tokenize(ev, kCreditNumberTextField); // 4
-
- for ( TextFieldLink *fl = fTextFields.First(); fl->GetTextField(); fl = fl->Next() )
- {
- Handle h = ( fl->GetTextField() )->GetTextHandle(&length);
-
- aToken = ( fl->GetTextField() )->GetID();
-
- if (aToken == amtToken)
- amount = h;
- else if (aToken == expToken)
- expiration = h;
- else if (aToken == acctToken)
- account = h;
- }
- err = AECreateDesc(typeApplSignature, &cnSignature, sizeof(cnSignature), &target);
- if (err)
- goto bail;
- err = AECreateAppleEvent(kCreditNowSuite, kAEProcessTransactions,
- &target,
- kAutoGenerateReturnID, kAnyTransactionID, &theAppleEvent);
- if (err)
- goto bail;
-
- AEDisposeDesc(&target);
- err = AEBuild(&event,
- "TREC{TYPE:'PURC', "
- "AMT :TEXT(@@), "
- "ACCT:TEXT(@@), "
- "EXP :TEXT(@@), "
- "CARD:'fals'(), " // Is the card present?
- "SIGN:'true'()}", // Do we have a signature?
- amount, account, expiration);
- if (err)
- goto bail;
-
- err = AEPutParamDesc(&theAppleEvent, '----', &event);
- if (err)
- goto bail;
- AEDisposeDesc( &event);
-
- // char str[255];
- // err = AEPrint(&theAppleEvent, str, (long)255);
-
-
- // Before sending AE, make sure the server is up and running.
- // 'true' makes it move to the forefront.
- err = SetTarget( 'CNOW', true );
-
- if( noErr == err )
- err = AESend(&theAppleEvent ,&reply, kAEWaitReply, kAEHighPriority, 2*60*60 ,nil, nil);
-
- MakeThisProcessFrontmost();
-
-
- if (err == noErr)
- {
- DescType actualType;
- Size actualSize;
- AEDesc directobj;
-
- OSType transResult = 0; // <- the results are left here
- Str255 message;
- Str255 approval;
- Boolean hasError = true; // rgacsat
-
- err = AEGetParamDesc(&reply, keyDirectObject, typeAERecord, &directobj);
-
- fAuthorization->SetText("\p "); // rgacsat
-
- if (err == noErr)
- {
- err = AEGetKeyPtr(&directobj, keyTransactionResult, typeEnumerated, &actualType, &transResult, sizeof(transResult), &actualSize);
-
- switch (transResult)
- {
- case kTransAccepted:
- pstrcpy(message, "\pAccepted");
- hasError = false; // rgacsat
- break;
-
- case kTransDeclined:
- pstrcpy(message, "\pDeclined");
- break;
-
- case kTransReferral:
- pstrcpy(message, "\pReferral");
- break;
-
- default:
- // rgac?? rgacsat:
- err = AEGetKeyPtr(&directobj, keyMessage, typeChar, &actualType, &message[1], sizeof(approval)-1, &actualSize);
- message[0] = (Byte)actualSize;
- memmove( approval, message, actualSize + 1 );
- fAuthorization->SetText(approval);
-
- pstrcpy(message, "\pError");
- break;
-
- }
- fAddressVerify->SetText(message);
-
- if( !hasError )
- {
- err = AEGetKeyPtr(&directobj, keyApprovalCode, typeChar, &actualType, &approval[1], sizeof(approval)-1, &actualSize);
- approval[0] = (Byte) actualSize;
- fAuthorization->SetText(approval);
- }
-
- AEDisposeDesc( &directobj);
- }
-
- AEDisposeDesc( &reply);
- }
- AEDisposeDesc( &theAppleEvent);
-
- bail:
- if (err != noErr)
- {
- Str255 errMsg;
- fAuthorization->SetText("\pAppleEvent error");
- errMsg[0] = sprintf((char*)&errMsg[1], "%hd", err);
- fAddressVerify->SetText(errMsg);
- ::SysBeep(1);
- }
- // for ( fl = fTextFields.First(); fl->GetTextField(); fl = fl->Next() )
- // (fl->GetTextField())->SetText("\p");
-
- this->PrivInvalAllDisplayFrames(ev);
- }
- //AET>>
-
-
- #if 0
- //AET<<
- //----------------------------------------------------------------------------------------
- Boolean CPCreditNowDemo::DoCopy(Environment *ev, ODFrame* frame)
- {
- ODUnused(frame);
-
- // WASSERTM((frame == fSession->GetArbitrator(ev)->GetFocusOwner(ev, fClipboardFocus)), "DragText::DoCopy - Clipboard focus not owned");
-
- ODClipboard* clipboard = fSession->GetClipboard(ev);
-
- TRY
- ODStorageUnit* clipBSU = kODNULL;
-
- clipboard->Clear(ev);
- clipBSU = clipboard->GetContentStorageUnit(ev);
-
- this->ExternalizeSelection(ev, clipBSU, kODCloneCopy);
- fClipboardChangeID = clipboard->GetChangeID(ev);
-
- CATCH_ALL
- WARN("Copy to clipboard failed");
- ENDTRY
-
- return kODTrue;
- }
- //AET>>
-
- //AET<<
- //----------------------------------------------------------------------------------------
- Boolean CPCreditNowDemo::DoCut(Environment *ev, ODFrame* frame)
- {
- this->DoCopy(ev, frame);
- fCurrentField->GetTextField()->Clear();
-
- return kODTrue;
- }
-
-
- //AET<<
- //----------------------------------------------------------------------------------------
- Boolean CPCreditNowDemo::DoPaste(Environment *ev, ODFrame* frame, ODType desiredKind, ODType translateKind)
- {
- ODUnused(frame);
-
- // WASSERTM((frame == _fSession->GetArbitrator(ev)->GetFocusOwner(ev, _fClipboardFocus)), "DragText::DoPaste - Clipboard focus not owned");
-
- ODClipboard* clipboard = fSession->GetClipboard(ev);
-
- TRY
- ODStorageUnit* clipBSU = clipboard->GetContentStorageUnit(ev);
- ODStorageUnit* contentSU;
-
- if ( translateKind == kODNULL )
- contentSU = clipBSU;
- else
- // Need to translate prior to incorporating the content
- // contentSU = this->TranslateContentKind(ev, clipBSU, desiredKind, translateKind);
-
-
- if ( PasteThisKind (ev, contentSU, kODIntlText, desiredKind)
- ||
- PasteThisKind (ev, contentSU, kODMacIText, desiredKind) )
- {
- // somSelf->OpenWhitespace(ev, contentSU, kODAppleTEXT);
- // somSelf->IncorporateStyledTextContent(ev, contentSU, _fSession->UniqueChangeID(ev));
- }
- else if ( PasteThisKind (ev, contentSU, kODASCIIText, desiredKind) )
- {
- // somSelf->OpenWhitespace(ev, contentSU, kODAppleTEXT);
- // somSelf->IncorporateTextContent(ev, contentSU, _fSession->UniqueChangeID(ev));
- }
-
- // if ( translateKind != kODNULL )
- {
- // Focus to the contents property and remove it
- // contentSU->Focus(ev, kODPropContents, kODPosUndefined, (ODValueType) kODNULL, 0, kODPosUndefined);
- // contentSU->Remove(ev);
- // ODReleaseObject(ev, contentSU); // $$$$$ Should remove storage unit
- }
- CATCH_ALL
- somPrintf("DoPaste caught error %d\n", ErrorCode());
- ENDTRY
-
- return kODTrue;
- }
- //AET>>
-
- #endif