/*---------------------------------------------------------------------------- DispatchEvent Handles all OSL messages that this object should handle ----------------------------------------------------------------------------*/ void AEGenericClass::DispatchEvent(AEDesc *token, const AppleEvent *appleEvent, AppleEvent *reply) { OSErr err = noErr; AEEventID eventID; OSType typeCode; Size actualSize = 0L; // Get the event ID err = AEGetAttributePtr(appleEvent, keyEventIDAttr, typeType, &typeCode, (Ptr)&eventID, sizeof(eventID), &actualSize); ThrowIfOSErr(err); try { switch (eventID) { case kAEClone: HandleDuplicate(token, appleEvent, reply); break; case kAEClose: HandleClose(token, appleEvent, reply); break; case kAECountElements: HandleCount(token, appleEvent, reply); break; case kAECreateElement: HandleMake(token, appleEvent, reply); break; case kAEDelete: HandleDelete(token, appleEvent, reply); break; case kAEDoObjectsExist: HandleExists(token, appleEvent, reply); break; case kAEGetData: HandleGetData(token, appleEvent, reply); break; case kAEGetDataSize: HandleDataSize(token, appleEvent, reply); break; case kAEMove: HandleMove(token, appleEvent, reply); break; case kAEOpen: // == kAEOpenDocuments HandleOpen(token, appleEvent, reply); break; case kAEPrint: HandlePrint(token, appleEvent, reply); break; case kAEOpenApplication: HandleRun(token, appleEvent, reply); break; case kAEReopenApplication: HandleReOpen(token, appleEvent, reply); break; case kAEQuitApplication: HandleQuit(token, appleEvent, reply); break; case kAESave: HandleSave(token, appleEvent, reply); break; case kAESetData: HandleSetData(token, appleEvent, reply); break; // MT-NW suite case kAEExtract: HandleExtract(token, appleEvent, reply); break; case kAESendMessage: HandleSendMessage(token, appleEvent, reply); break; default: err = errAEEventNotHandled; break; } } catch (OSErr catchErr) { PutReplyErrorNumber(reply, catchErr); throw; } catch ( ... ) { PutReplyErrorNumber(reply, paramErr); throw; } }
/*移动位置,包括手动操作和归零操作*/ void ScanThread::Move() { /*检测上升按键的边缘*/ if(a_last){ if(!(spark_info->c_array[C_Z_IN0] & 0x10)){ a_edge = RISE; } else a_edge = NONE; }else{ if((spark_info->c_array[C_Z_IN0] & 0x10)){ if(spark_info->hand.Mutex == Hand_NULL_MUTEX){ a_edge = FALL; AxisSwitch(&spark_info->hand ,Hand_Z_AXIS ,Hand_A_DRIECT); spark_info->hand.Mutex = Hand_MOVE_MUTEX; }else{ qDebug()<<"Can't handle this axis!"; } } else a_edge = NONE; } /*检测上升按键的边缘*/ if(b_last){ if(!(spark_info->c_array[C_Z_IN0] & 0x20)){ b_edge = RISE; } else b_edge = NONE; }else{ if((spark_info->c_array[C_Z_IN0] & 0x20)){ if(spark_info->hand.Mutex == Hand_NULL_MUTEX){ b_edge = FALL; AxisSwitch(&spark_info->hand ,Hand_Z_AXIS ,Hand_B_DRIECT); spark_info->hand.Mutex = Hand_MOVE_MUTEX; }else{ qDebug()<<"Can't handle this axis!"; } } else b_edge = NONE; } /*检测自动归零的边缘*/ if(c_last){ if(!spark_info->b_array[B_ZERO]){ c_edge = RISE; } else c_edge = NONE; }else{ if(spark_info->b_array[B_ZERO]){ if(spark_info->hand.Mutex == Hand_NULL_MUTEX){ c_edge = FALL; AxisSwitch(&program ,Hand_Z_AXIS ,Hand_A_DRIECT); program.Mutex = Hand_ZERO_MUTEX; spark_info->hand.Mutex = Hand_ZERO_MUTEX; } } else c_edge = NONE; } /*检测Z轴向上归原点的边缘*/ if(e_last){ if(!spark_info->b_array[B_HOME_Z_UP]){ e_edge = RISE; } else e_edge = NONE; }else{ if(spark_info->b_array[B_HOME_Z_UP]){ if(spark_info->hand.Mutex == Hand_NULL_MUTEX){ e_edge = FALL; AxisSwitch(&program ,Hand_Z_AXIS ,Hand_A_DRIECT); program.Mutex = Hand_HOME_MUTEX; spark_info->hand.Mutex = Hand_HOME_MUTEX; } } else e_edge = NONE; } /*检测Z轴向下归原点的边缘*/ if(f_last){ if(!spark_info->b_array[B_HOME_Z_DOWN]){ f_edge = RISE; } else f_edge = NONE; }else{ if(spark_info->b_array[B_HOME_Z_DOWN]){ if(spark_info->hand.Mutex == Hand_NULL_MUTEX){ f_edge = FALL; AxisSwitch(&program ,Hand_Z_AXIS ,Hand_B_DRIECT); program.Mutex = Hand_HOME_MUTEX; spark_info->hand.Mutex = Hand_HOME_MUTEX; } } else f_edge = NONE; } switch(spark_info->hand.Mutex){ case Hand_NULL_MUTEX: break; case Hand_MOVE_MUTEX: HandleMove(); break; case Hand_ZERO_MUTEX: ZeroMove(); break; case Hand_HOME_MUTEX: HomeMove(); break; case Hand_POINT_MUTEX: case Hand_CALIB_MUTEX: case Hand_SPARK_MUTEX: break; } }
/* * entry point for the background thread */ wxThread::ExitCode WorkerThread::Entry() { bool bDone = TestDestroy(); Debug.AddLine("WorkerThread::Entry() begins"); #if defined(__WINDOWS__) HRESULT hr = CoInitializeEx(NULL, COINIT_MULTITHREADED); Debug.AddLine("worker thread CoInitializeEx returns %x", hr); #endif while (!bDone) { WORKER_THREAD_REQUEST message; bool dummy; wxMessageQueueError queueError = m_wakeupQueue.Receive(dummy); Debug.AddLine("Worker thread wakes up"); assert(queueError == wxMSGQUEUE_NO_ERROR); queueError = m_highPriorityQueue.ReceiveTimeout(0, message); if (queueError == wxMSGQUEUE_TIMEOUT) { queueError = m_lowPriorityQueue.ReceiveTimeout(0, message); assert(queueError != wxMSGQUEUE_TIMEOUT); } assert(queueError == wxMSGQUEUE_NO_ERROR); switch(message.request) { bool bError; case REQUEST_NONE: Debug.AddLine("worker thread servicing REQUEST_NONE"); break; case REQUEST_TERMINATE: Debug.AddLine("worker thread servicing REQUEST_TERMINATE"); bDone = true; break; case REQUEST_EXPOSE: Debug.AddLine("worker thread servicing REQUEST_EXPOSE %d", message.args.expose.exposureDuration); bError = HandleExpose(&message.args.expose); SendWorkerThreadExposeComplete(message.args.expose.pImage, bError); break; case REQUEST_MOVE: { Debug.AddLine(wxString::Format("worker thread servicing REQUEST_MOVE %s dir %d (%.2f, %.2f)", message.args.move.pMount->GetMountClassName(), message.args.move.direction, message.args.move.vectorEndpoint.X, message.args.move.vectorEndpoint.Y)); Mount::MOVE_RESULT moveResult = HandleMove(&message.args.move); SendWorkerThreadMoveComplete(message.args.move.pMount, moveResult); break; } default: Debug.AddLine("worker thread servicing unknown request %d", message.request); break; } Debug.AddLine("worker thread done servicing request"); bDone |= TestDestroy(); } Debug.AddLine("WorkerThread::Entry() ends"); Debug.Flush(); return (wxThread::ExitCode)0; }
long ProjectPrefsGUI::HandleButtonClick(NativeControl Handle, NativeGUIWin NW, int ButtonID) { if (SwapInProgress || MoveInProgress) { SwapInProgress = MoveInProgress = 0; #ifdef _WIN32 if (Curse) SetClassLong(GetDlgItem(NativeWin, IDC_PARLIST), GCL_HCURSOR, (long)Curse); #endif // _WIN32 EndPointer(); } // if switch (ButtonID) { case ID_KEEP: { AppScope->MCP->SetParam(1, WCS_TOOLBARCLASS_MODULES, WCS_TOOLBAR_CLOSE_MOD, WCS_TOOLBAR_ITEM_PPG, 0); break; } // case IDCANCEL: { DoCancel(); //AppScope->MCP->SetParam(1, WCS_TOOLBARCLASS_MODULES, WCS_TOOLBAR_CLOSE_MOD, // WCS_TOOLBAR_ITEM_PPG, 0); break; } // case IDC_MATRIX_1: { SetViewport(0); break; } // case IDC_MATRIX_2: { SetViewport(1); break; } // case IDC_MATRIX_3: { SetViewport(2); break; } // case IDC_MATRIX_4: { SetViewport(3); break; } // case IDC_MATRIX_5: { SetViewport(4); break; } // case IDC_MATRIX_6: { SetViewport(5); break; } // case IDC_MATRIX_7: { SetViewport(6); break; } // case IDC_MATRIX_8: { SetViewport(7); break; } // case IDC_MATRIX_9: { SetViewport(8); break; } // case IDC_MATRIX_10: { SetViewport(9); break; } // case IDC_MATRIX_11: { SetViewport(10); break; } // case IDC_MATRIX_12: { SetViewport(11); break; } // case ID_DEFAULT: { DoDefaultDir(); break; } // case IDC_ADD: { DoAdd(); break; } // case IDC_MOVEDLUP: { HandleMove(0); // up break; } // up case IDC_MOVEDLDOWN: { HandleMove(1); // down break; } // down /* case IDC_SWAP: { //DoSwap(0); break; } // case IDC_MOVE: { //DoMove(0); break; } // */ case IDC_REMOVE: { DoRemove(); break; } // case IDC_READONLY: { DoReadOnly(); break; } // case IDC_LOAD: { DoLoad(); break; } // case IDC_SET: { DoAdvConfig(1); break; } // SET case IDC_UNSET: { DoAdvConfig(2); break; } // IDC_UNSET } // switch return(0); } // ProjectPrefsGUI::HandleButtonClick