home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 4 / Apprentice-Release4.iso / Source Code / OpenDoc / CreditNow! / CreditNow! Source / $Sources / CPCreditNowDemo.Event.cpp < prev    next >
Encoding:
Text File  |  1995-04-30  |  18.0 KB  |  705 lines  |  [TEXT/MPCC]

  1. //----------------------------------------------------------------------------------------
  2. // UI Events protocol
  3. //----------------------------------------------------------------------------------------
  4.  
  5. #ifndef _CREDITNOWDEMO_
  6. #include "CPCreditNowDemo.h"
  7. #endif
  8.  
  9. #ifndef __CONTROLS__
  10. #include <Controls.h>
  11. #endif
  12.  
  13. #include <stdio.h>
  14. #include <AEBuild.h>
  15. #include <AEPrint.h>
  16. #include "ValidationSuite.h"
  17. #include "Launchit.h"
  18.  
  19. //----------------------------------------------------------------------------------------
  20.  
  21. ODBoolean CPCreditNowDemo::HandleEvent(Environment* ev, ODEventData* event,
  22.                                    ODFrame* frame, ODFacet* facet,
  23.                                    ODEventInfo* eventInfo)
  24. {
  25.     // CodeWarrior: Cmd-Click or Search:Find Definition • Explain_HandleEvent
  26.     EnteringMethod("\pCPCreditNowDemo::HandleEvent");
  27.     ODUnused(eventInfo);
  28.  
  29.     ODBoolean    tWasHandled = kODFalse;
  30.  
  31.     switch ( event->what )
  32.     {
  33.     case nullEvent:
  34.         if (::IsDialogEvent((EventRecord *)event))
  35.         {
  36.             short itemHit;
  37.             DialogPtr dialog;
  38.             tWasHandled = ::DialogSelect((EventRecord *)event, &dialog, &itemHit);
  39.             return tWasHandled;
  40.         }
  41. //AET<<
  42.         {
  43.             CFocus    foc(ev, fFacet);
  44.             (fCurrentField->GetTextField())->Idle();
  45.         }
  46. //AET>>
  47.         tWasHandled = kODTrue;
  48.         break;
  49.  
  50.     case mouseDown:
  51.         tWasHandled = this->PrivHandleMouseDown(ev, event, frame, facet);
  52.         break;
  53.  
  54.         case kODEvtMouseDownEmbedded:
  55.         case mouseUp:
  56.             tWasHandled = kODTrue;
  57.             break;
  58.  
  59. //AET<<
  60.         case activateEvt:
  61.             {
  62.                 CFocus    foc(ev, fFacet);
  63.                 if (event->modifiers & activeFlag)
  64.                     (fCurrentField->GetTextField())->Activate();
  65.                 else
  66.                     (fCurrentField->GetTextField())->Deactivate();
  67.             }
  68.             tWasHandled = kODTrue;
  69.             break;
  70.  
  71.         case keyDown:
  72.         case autoKey:
  73.             {
  74.                 char    inKey = event->message & charCodeMask;
  75.                 TextField *aField = fCurrentField->GetTextField();
  76.                 
  77.                 switch (inKey)
  78.                 {
  79.                     case chTab:            // go to next field
  80.                         this->TabToField(ev, event, frame, facet);
  81.                         break;
  82.                         
  83.                     case chEnter:        //execute
  84.                     case chReturn:
  85.                         this->Authorize(ev);
  86.                         break;
  87.                     
  88.                     default:
  89.                         {
  90.                             CFocus    foc(ev, fFacet);
  91.                             aField->KeyStroke(inKey, event->modifiers);
  92.                         }
  93.                         break;
  94.                 }
  95.                  tWasHandled = kODTrue;
  96.             }
  97.             break;
  98. //AET>>
  99.         
  100.     case kODEvtMenu:
  101.         tWasHandled = this->PrivHandleMenuEvent(ev, frame, event );
  102.         break;
  103.         
  104.     default:
  105.         break;
  106.     }
  107.  
  108.     return tWasHandled;
  109. }
  110.  
  111. //----------------------------------------------------------------------------------------
  112.  
  113. void CPCreditNowDemo::AdjustMenus(Environment* ev, ODFrame* frame)
  114. {
  115.     // CodeWarrior: Cmd-Click or Search:Find Definition • Explain_AdjustMenus
  116.     EnteringMethod("\pCPCreditNowDemo::AdjustMenus");
  117.     ODUnused(frame);
  118.  
  119.     Str63        aboutText;
  120.     ODIText*    odiText;
  121.  
  122.     fMenuBar->EnableCommand(ev, kODCommandViewAsWin, !frame->IsRoot(ev) );
  123.     fMenuBar->EnableCommand(ev, kODCommandGetPartInfo, kODTrue);
  124.  
  125.     {
  126.         CUsingLibraryResources fil;
  127.         ::GetIndString(aboutText, kContentStringResID, kAboutTextID);
  128.     }
  129.  
  130.     ODScriptCode script = ::GetScriptManagerVariable(smSysScript);
  131.     ODLangCode lang = ::GetScriptVariable(script, smScriptLang);
  132.     odiText = CreateIText(script, lang, aboutText);
  133.     fMenuBar->SetItemString(ev, kODCommandAbout, odiText);
  134.     DisposeIText(odiText);
  135. //AET<<
  136.     Boolean selection;
  137.     selection = fCurrentField->GetTextField()->HaveSelection();
  138. //    fMenuBar->EnableCommand(ev, kODCommandCut, selection);
  139. //    fMenuBar->EnableCommand(ev, kODCommandCopy, selection);
  140.     fMenuBar->EnableCommand(ev, kODCommandClear, selection);
  141.     
  142. //    Boolean canPaste = ValueOnClipboard(ev, kODASCIIText, fSession);
  143. //    fMenuBar->EnableCommand(ev, kODCommandPaste, selection);
  144. //AET>>
  145. }
  146.  
  147. //----------------------------------------------------------------------------------------
  148.  
  149. ODSession* gSession;
  150.  
  151. ODBoolean CPCreditNowDemo::PrivHandleMenuEvent(Environment* ev, ODFrame* frame, ODEventData* event)
  152. {
  153.     EnteringMethod("\pCPCreditNowDemo::PrivHandleMenuEvent");
  154.     ODUnused(frame);
  155.  
  156.     long    menuResult = event->message;
  157.     short    menu = HiWord(menuResult);
  158.     short    item = LoWord(menuResult);
  159.  
  160.     if (menu) {
  161.  
  162.         switch( fMenuBar->GetCommand(ev, menu, item) ) 
  163.         {
  164.         case kODCommandAbout:
  165.         {
  166.             CUsingLibraryResources fil;
  167.  
  168.             if (fSession->GetArbitrator(ev)->RequestFocus(ev, fModalFocus, frame))
  169.             {
  170.                 ::SetCursor(&ODQDGlobals.arrow);
  171.                 gSession = fSession;                // DialogFilter uses this!
  172.                 ModalFilterUPP modalFilter = NewModalFilterProc(MyDialogFilter);
  173.                 ::Alert(kCreditNowDemoAboutBoxID, modalFilter);
  174.                 DisposeRoutineDescriptor(modalFilter);
  175.                 fSession->GetArbitrator(ev)->RelinquishFocus(ev, fModalFocus,frame);
  176.             }
  177.             else
  178.                 ::SysBeep(1);
  179.         }
  180.         break;
  181.  
  182. #if 0
  183. //AET<<
  184.             case kODCommandCut:
  185.                     this->DoCut(ev, frame);
  186.                 break;
  187.  
  188.             case kODCommandCopy:
  189.                     this->DoCopy(ev, frame);
  190.                 break;
  191.  
  192.             case kODCommandPaste:
  193.                     this->DoPaste(ev, frame, kODNULL, kODNULL);
  194.                 break;
  195. #endif
  196.             case kODCommandNew:
  197.                 for ( TextFieldLink *fl = fTextFields.First(); fl->GetTextField(); fl = fl->Next() )
  198.                 {
  199.                     (fl->GetTextField())->SetText("\p");
  200.                 }
  201.                 this->PrivInvalAllDisplayFrames(ev);
  202.                 this->SelectFirstField(ev, kODNULL);
  203.                 break;
  204.  
  205.             case kODCommandClear:
  206.                     fCurrentField->GetTextField()->Clear();
  207.                 break;
  208. //AET>>
  209.  
  210.         case kODCommandViewAsWin:
  211.             this->Open(ev, frame);
  212.             break;
  213.  
  214.         case kODCommandGetPartInfo:
  215.             ODFrameFacetIterator* facets = frame->CreateFacetIterator(ev);
  216.             fSession->GetInfo(ev)->ShowPartFrameInfo(ev, facets->First(ev), kODFalse);
  217.             break;
  218.  
  219.         default:
  220.             return kODFalse;
  221.         }
  222.     }
  223.  
  224.     return kODTrue;
  225. }
  226.  
  227. //------------------------------------------------------------------------------
  228.  
  229. ODBoolean CPCreditNowDemo::PrivHandleMouseDown(Environment* ev, ODEventData* event,
  230.                                          ODFrame* frame, ODFacet* facet)
  231. {
  232.     EnteringMethod("\pCPCreditNowDemo::PrivHandleMouseDown");
  233.  
  234.     ODBoolean handled = kODFalse;
  235.  
  236.     if (facet == kODNULL)        // Did we get a click outside a modal dialog? …
  237.     {
  238.         ::SysBeep(1);
  239.         return kODTrue;            // Return that click was handled.
  240.     }
  241.  
  242.     // Activate the window if it is not active…
  243.     if (! facet->GetWindow(ev)->IsActive(ev))
  244.     {
  245.         // select the window
  246.         facet->GetWindow(ev)->Select(ev);
  247.  
  248.         // typically you continue handling the event, if not, just return kODTrue
  249.         handled = kODTrue;
  250.         
  251.         // return kODTrue; // user needs to click twice to get something done
  252.     }
  253.  
  254.     // dialog events first
  255.     if (::IsDialogEvent((EventRecord *)event))
  256.     {
  257.         short        itemHit;
  258.         DialogPtr    dialog;
  259.  
  260.         handled = ::DialogSelect((EventRecord *)event, &dialog, &itemHit);
  261.         ODWindow* window = fSession->GetWindowState(ev)->GetODWindow(ev, dialog);
  262.         return handled;        // In preparation for more "if" cases to be added below.
  263.     }
  264.  
  265.     // get the mouse in local coordinates
  266.     ODWindow* odwnd = frame->GetWindow(ev);
  267.     ODPoint odPoint;
  268.     GetWindowPoint(odwnd, ev, event->where, &odPoint);
  269.  
  270.     // test for click in grow box, if appropriate
  271.     if (frame->IsRoot(ev))
  272.     {
  273.         WindowPtr wnd   = (WindowPtr)odwnd->GetPlatformWindow(ev);
  274.  
  275.         Rect r = wnd->portRect;
  276.         r.left = r.right  - 15;
  277.         r.top  = r.bottom - 15;
  278.         if (::PtInRect(odPoint.AsQDPoint(), &r)) {
  279.             ::SetRect(&r, 200, 200, 20000, 20000);
  280.             long newWindowSize = ::GrowWindow(wnd, event->where, &r);
  281.             ::SizeWindow(wnd, LoWord(newWindowSize), HiWord(newWindowSize), true);
  282.             odwnd->AdjustWindowShape(ev);
  283.             return kODTrue;
  284.         }
  285.     }
  286.  
  287.     if ( fSession->GetArbitrator(ev)->RequestFocusSet(ev, fFocusSet,frame) )
  288.     {
  289.         // Try to grab all of our foci…
  290.         this->FocusAcquired(ev, fSelectionFocus, frame);
  291.         this->FocusAcquired(ev, fMenuFocus, frame);
  292.         this->FocusAcquired(ev, fKeyFocus, frame);
  293.  
  294.     } else {
  295.         // We couldn't get focus we requested, so bail.
  296.         // Alternatively, parts of functionality can be disabled.
  297.         return kODFalse;
  298.     }
  299.  
  300.     // Handle clicks in used shape…
  301.     odPoint = facet->GetWindowContentTransform(ev, kODNULL)->InvertPoint(ev, &odPoint);
  302.  
  303.     ODShape*  usedShape = this->PrivGetUsedShape(ev, frame);
  304.     ODBoolean hit       = usedShape->ContainsPoint(ev, &odPoint);
  305.     usedShape->Release(ev);
  306.  
  307. //AET(original hit testing does not work)    if (hit)
  308. //AET(so ignore it)
  309.     if (hit)
  310.         handled = this->PrivUsedShapeHandleMouseDown(ev, event, frame, facet);
  311.  
  312.     return handled;
  313. }
  314.  
  315. //------------------------------------------------------------------------------
  316.  
  317. ODBoolean CPCreditNowDemo::PrivUsedShapeHandleMouseDown(Environment* ev,
  318.         ODEventData* event, ODFrame* frame, ODFacet* facet)
  319. {
  320.     EnteringMethod("\pCPCreditNowDemo::PrivUsedShapeHandleMouseDown");
  321.  
  322.     // Get the window and platform window (i.e. WindowPtr)…
  323.     ODWindow* odwnd = frame->GetWindow(ev);
  324.     ODPlatformWindow facetPort = odwnd->GetPlatformWindow(ev);
  325.  
  326.     // Get the mouse in window-local and facet-local coordinates…
  327.     ODPoint windowPoint;
  328.     GetWindowPoint(odwnd, ev, event->where, &windowPoint);
  329.     ODPoint facetPoint = 
  330.         facet->GetWindowContentTransform(ev, kODNULL)->InvertPoint(ev, &windowPoint);
  331.  
  332.     // Handle the click in whatever way is appropriate…
  333. //AET<<
  334.     {
  335.         CFocus    foc(ev, facet);
  336.  
  337.         Point    macPoint = facetPoint.AsQDPoint();
  338.  
  339.         short ctlPart = ::FindControl(macPoint, facetPort, &fAuthButton);
  340.         if (ctlPart == kInButtonControlPart)
  341.         {
  342.             if (::TrackControl(fAuthButton, macPoint, nil) != 0)
  343.             {
  344.                 this->Authorize(ev);
  345.                 return kODTrue;        // We handled the click.
  346.             }
  347.         }
  348.         else
  349.         {
  350.             Boolean found = false;
  351.             
  352.             for ( TextFieldLink *fl = fTextFields.First(); fl->GetTextField(); fl = fl->Next() )
  353.                 if ( (fl->GetTextField())->ContainsPoint(macPoint) )
  354.                 {
  355.                     found = true;
  356.                     break;
  357.                 }
  358.             if (found)
  359.             {
  360.                 if (fl == fCurrentField)
  361.                     (fl->GetTextField())->MouseClick(macPoint, event);
  362.                 else
  363.                 {
  364.                     fCurrentField->GetTextField()->Deactivate();
  365.                     fCurrentField = fl;
  366.                     fCurrentField->GetTextField()->Activate();
  367.                 }
  368.                 return kODTrue;        // We handled the click.
  369.             }
  370.         }
  371.     }
  372.     return kODFalse;        // We handled the click.
  373. //AET>>
  374. }
  375.  
  376.  
  377.  
  378.  
  379. //AET<<
  380.  
  381. //----------------------------------------------------------------------------------------
  382.  
  383. void pstrcpy(Str255 dest, Str255 source);
  384. void pstrcpy(Str255 dest, Str255 source)
  385. {
  386.     ::BlockMove(&source[0], &dest[0], source[0]+1);
  387. }
  388.  
  389.  
  390. //----------------------------------------------------------------------------------------
  391. void CPCreditNowDemo::TabToField(Environment* ev, ODEventData* event,
  392.                                      ODFrame* frame, ODFacet* facet)
  393. {
  394.     char    inKey = event->message & charCodeMask;
  395.     TextField *aField = fCurrentField->GetTextField();
  396.     TextFieldLink *nextField;
  397.  
  398.     if ( !aField->Validate() )    // Verify valid field contents
  399.         return;        //contents not valid
  400.     
  401.     if ((event->modifiers & shiftKey) == shiftKey)
  402.     {
  403.         nextField = fCurrentField->Previous();
  404.         while ( kODNULL == nextField->GetTextField() )
  405.             nextField = nextField->Previous();
  406.     }
  407.     else
  408.     {
  409.         nextField = fCurrentField->Next();
  410.         while ( kODNULL == nextField->GetTextField() )
  411.             nextField = nextField->Next();
  412.     }
  413.     this->SelectField(ev, facet, nextField);
  414. }
  415.  
  416. //----------------------------------------------------------------------------------------
  417.  
  418. void CPCreditNowDemo::SelectField(Environment* ev, ODFacet* facet, TextFieldLink *nextField)
  419. {
  420.     if (kODNULL == facet)
  421.     {
  422.         facet = fFacet;
  423.     }
  424.     if (facet)
  425.     {
  426.         CFocus    foc(ev, facet);
  427.         (fCurrentField->GetTextField())->Deactivate();
  428.         fCurrentField = nextField;
  429.         (fCurrentField->GetTextField())->SetSelection(0,32000);
  430.         (fCurrentField->GetTextField())->Activate();
  431.     }
  432. }
  433.  
  434. //----------------------------------------------------------------------------------------
  435.  
  436. void CPCreditNowDemo::SelectFirstField(Environment* ev, ODFacet* facet)
  437. {
  438.     if (kODNULL == facet)
  439.     {
  440.         facet = fFacet;
  441.     }
  442.     if (facet)
  443.     {
  444.         CFocus    foc(ev, facet);
  445.             //set active field to first field
  446.         (fCurrentField->GetTextField())->Deactivate();
  447.         fCurrentField = fTextFields.First();
  448.         (fCurrentField->GetTextField())->Activate();
  449.         (fCurrentField->GetTextField())->SetSelection(0,32000);
  450.     }
  451. }
  452.  
  453. //----------------------------------------------------------------------------------------
  454.  
  455. void CPCreditNowDemo::Authorize(Environment* ev)
  456. {
  457.     Handle amount = nil;
  458.     Handle account = nil;
  459.     Handle expiration = nil;
  460.     long length;
  461.     
  462.     OSType        cnSignature = 'CNOW';
  463.     AppleEvent    event, reply;
  464.     AEAddressDesc    target;
  465.     AppleEvent        theAppleEvent;
  466.     OSErr err;
  467.     
  468.     ODTypeToken        aToken;
  469.     ODTypeToken        amtToken;
  470.     ODTypeToken        expToken;
  471.     ODTypeToken        acctToken;
  472.  
  473.  
  474.         //clear response fields
  475.     fAuthorization->SetText("\p");
  476.     fAddressVerify->SetText("\pPending…");
  477.     this->Draw(ev, fFacet, kODNULL);
  478.     
  479.         //set active field to first field
  480.     this->SelectFirstField(ev, kODNULL);
  481.  
  482.     amtToken    = fSession->Tokenize(ev, kAmountTextField);                // 6
  483.     expToken    = fSession->Tokenize(ev, kExpirationTextField);            // 5
  484.     acctToken    = fSession->Tokenize(ev, kCreditNumberTextField);        // 4
  485.  
  486.     for ( TextFieldLink *fl = fTextFields.First(); fl->GetTextField(); fl = fl->Next() )
  487.     {
  488.         Handle h = ( fl->GetTextField() )->GetTextHandle(&length);
  489.         
  490.         aToken = ( fl->GetTextField() )->GetID();
  491.  
  492.         if (aToken == amtToken)
  493.             amount = h;
  494.         else if (aToken == expToken)
  495.             expiration = h;
  496.         else if (aToken == acctToken)
  497.             account = h;
  498.     }
  499.     err = AECreateDesc(typeApplSignature, &cnSignature, sizeof(cnSignature), &target);
  500.     if (err)
  501.         goto bail;
  502.     err = AECreateAppleEvent(kCreditNowSuite, kAEProcessTransactions,
  503.                 &target,
  504.                 kAutoGenerateReturnID, kAnyTransactionID, &theAppleEvent);
  505.     if (err)
  506.         goto bail;
  507.     
  508.     AEDisposeDesc(&target);
  509.     err = AEBuild(&event,
  510.                 "TREC{TYPE:'PURC', "        
  511.                           "AMT :TEXT(@@), "    
  512.                           "ACCT:TEXT(@@), "
  513.                           "EXP :TEXT(@@), "
  514.                           "CARD:'fals'(), "        // Is the card present?
  515.                           "SIGN:'true'()}",        // Do we have a signature?
  516.                 amount, account, expiration);
  517.     if (err)
  518.         goto bail;
  519.  
  520.     err = AEPutParamDesc(&theAppleEvent, '----', &event);
  521.     if (err)
  522.         goto bail;
  523.     AEDisposeDesc( &event);
  524.  
  525. //    char str[255];
  526. //    err = AEPrint(&theAppleEvent, str, (long)255);
  527.  
  528.  
  529.     // Before sending AE, make sure the server is up and running. 
  530.     // 'true' makes it move to the forefront.
  531.     err = SetTarget( 'CNOW', true );
  532.     
  533.     if( noErr == err )
  534.         err = AESend(&theAppleEvent ,&reply, kAEWaitReply, kAEHighPriority, 2*60*60 ,nil, nil);
  535.  
  536.     MakeThisProcessFrontmost();
  537.     
  538.  
  539.     if (err == noErr)
  540.     {
  541.         DescType    actualType;
  542.         Size        actualSize;
  543.         AEDesc        directobj;
  544.  
  545.         OSType        transResult = 0;    // <- the results are left here
  546.         Str255        message;
  547.         Str255        approval;
  548.         Boolean        hasError    = true;    // rgacsat
  549.     
  550.         err = AEGetParamDesc(&reply, keyDirectObject, typeAERecord, &directobj);
  551.     
  552.         fAuthorization->SetText("\p ");        // rgacsat
  553.     
  554.         if (err == noErr)
  555.         {    
  556.             err = AEGetKeyPtr(&directobj, keyTransactionResult, typeEnumerated, &actualType, &transResult, sizeof(transResult), &actualSize);
  557.     
  558.             switch (transResult)
  559.             {
  560.             case kTransAccepted:
  561.                 pstrcpy(message, "\pAccepted");
  562.                 hasError = false;            // rgacsat
  563.                 break;
  564.                 
  565.             case kTransDeclined:
  566.                 pstrcpy(message, "\pDeclined");
  567.                 break;
  568.                 
  569.             case kTransReferral:
  570.                 pstrcpy(message, "\pReferral");
  571.                 break;
  572.                 
  573.             default:
  574.                 // rgac?? rgacsat:
  575.                 err = AEGetKeyPtr(&directobj, keyMessage, typeChar, &actualType, &message[1], sizeof(approval)-1, &actualSize);
  576.                 message[0] = (Byte)actualSize;
  577.                 memmove( approval, message, actualSize + 1 );
  578.                 fAuthorization->SetText(approval);
  579.  
  580.                 pstrcpy(message, "\pError");
  581.                 break;
  582.                 
  583.             }
  584.             fAddressVerify->SetText(message);
  585.  
  586.             if( !hasError )
  587.             {
  588.                 err = AEGetKeyPtr(&directobj, keyApprovalCode, typeChar, &actualType, &approval[1], sizeof(approval)-1, &actualSize);
  589.                 approval[0] = (Byte) actualSize;
  590.                 fAuthorization->SetText(approval);
  591.             }
  592.                 
  593.             AEDisposeDesc( &directobj);
  594.         }
  595.  
  596.         AEDisposeDesc( &reply);
  597.     }
  598.     AEDisposeDesc( &theAppleEvent);
  599.  
  600. bail:
  601.     if (err != noErr)
  602.     {
  603.         Str255 errMsg;
  604.         fAuthorization->SetText("\pAppleEvent error");
  605.         errMsg[0] = sprintf((char*)&errMsg[1], "%hd", err);
  606.         fAddressVerify->SetText(errMsg);
  607.         ::SysBeep(1);
  608.     }
  609. //    for ( fl = fTextFields.First(); fl->GetTextField(); fl = fl->Next() )
  610. //        (fl->GetTextField())->SetText("\p");
  611.     
  612.     this->PrivInvalAllDisplayFrames(ev);
  613. }
  614. //AET>>
  615.  
  616.  
  617. #if 0
  618. //AET<<
  619. //----------------------------------------------------------------------------------------
  620. Boolean CPCreditNowDemo::DoCopy(Environment *ev, ODFrame* frame)
  621. {
  622.     ODUnused(frame);
  623.     
  624. //    WASSERTM((frame == fSession->GetArbitrator(ev)->GetFocusOwner(ev, fClipboardFocus)), "DragText::DoCopy - Clipboard focus not owned");
  625.  
  626.     ODClipboard* clipboard = fSession->GetClipboard(ev);
  627.  
  628.     TRY
  629.         ODStorageUnit* clipBSU = kODNULL;
  630.  
  631.         clipboard->Clear(ev);
  632.         clipBSU = clipboard->GetContentStorageUnit(ev);
  633.         
  634.         this->ExternalizeSelection(ev, clipBSU, kODCloneCopy);
  635.         fClipboardChangeID = clipboard->GetChangeID(ev);
  636.  
  637.     CATCH_ALL
  638.         WARN("Copy to clipboard failed");
  639.     ENDTRY
  640.  
  641.     return kODTrue;
  642. }
  643. //AET>>
  644.  
  645. //AET<<
  646. //----------------------------------------------------------------------------------------
  647. Boolean CPCreditNowDemo::DoCut(Environment *ev, ODFrame* frame)
  648. {
  649.     this->DoCopy(ev, frame);
  650.     fCurrentField->GetTextField()->Clear();
  651.  
  652.     return kODTrue;
  653. }
  654.  
  655.  
  656. //AET<<
  657. //----------------------------------------------------------------------------------------
  658. Boolean CPCreditNowDemo::DoPaste(Environment *ev, ODFrame* frame, ODType desiredKind, ODType translateKind)
  659. {
  660.     ODUnused(frame);
  661.  
  662. //    WASSERTM((frame == _fSession->GetArbitrator(ev)->GetFocusOwner(ev, _fClipboardFocus)), "DragText::DoPaste - Clipboard focus not owned");
  663.  
  664.     ODClipboard* clipboard = fSession->GetClipboard(ev);
  665.  
  666.     TRY
  667.         ODStorageUnit* clipBSU = clipboard->GetContentStorageUnit(ev);
  668.         ODStorageUnit* contentSU;
  669.  
  670.         if ( translateKind == kODNULL )
  671.             contentSU = clipBSU;
  672.         else
  673.             // Need to translate prior to incorporating the content
  674. //            contentSU = this->TranslateContentKind(ev, clipBSU, desiredKind, translateKind);
  675.  
  676.  
  677.         if ( PasteThisKind (ev, contentSU, kODIntlText, desiredKind) 
  678.             ||
  679.              PasteThisKind (ev, contentSU, kODMacIText, desiredKind) )
  680.         {
  681. //            somSelf->OpenWhitespace(ev, contentSU, kODAppleTEXT);
  682. //            somSelf->IncorporateStyledTextContent(ev, contentSU, _fSession->UniqueChangeID(ev));
  683.         }
  684.         else if ( PasteThisKind (ev, contentSU, kODASCIIText, desiredKind) )
  685.         {
  686. //            somSelf->OpenWhitespace(ev, contentSU, kODAppleTEXT);
  687. //            somSelf->IncorporateTextContent(ev, contentSU, _fSession->UniqueChangeID(ev));
  688.         }
  689.         
  690. //        if ( translateKind != kODNULL )
  691.         {
  692.             // Focus to the contents property and remove it
  693. //            contentSU->Focus(ev, kODPropContents, kODPosUndefined, (ODValueType) kODNULL, 0, kODPosUndefined);
  694. //            contentSU->Remove(ev);
  695. //            ODReleaseObject(ev, contentSU);    // $$$$$ Should remove storage unit
  696.         }
  697.     CATCH_ALL
  698.         somPrintf("DoPaste caught error %d\n", ErrorCode());
  699.     ENDTRY
  700.  
  701.     return kODTrue;
  702. }
  703. //AET>>
  704.  
  705. #endif