void VariablesView::VariableTableModel::ValueNodeValueChanged(ValueNode* valueNode) { if (fContainer == NULL) return; AutoLocker<ValueNodeContainer> containerLocker(fContainer); // check whether we know the node ValueNodeChild* nodeChild = valueNode->NodeChild(); if (nodeChild == NULL) return; ModelNode* modelNode = fNodeTable.Lookup(nodeChild); if (modelNode == NULL) return; // check whether the value actually changed Value* value = valueNode->GetValue(); if (value == modelNode->GetValue()) return; // get a value handler ValueHandler* valueHandler; status_t error = ValueHandlerRoster::Default()->FindValueHandler(value, valueHandler); if (error != B_OK) return; BReference<ValueHandler> handlerReference(valueHandler, true); // create a table cell renderer for the value TableCellValueRenderer* renderer = NULL; error = valueHandler->GetTableCellValueRenderer(value, renderer); if (error != B_OK) return; // set value/handler/renderer modelNode->SetValue(value); modelNode->SetValueHandler(valueHandler); modelNode->SetTableCellRenderer(renderer); // notify table model listeners NotifyNodeChanged(modelNode); }
void TeamDebugger::_HandleDebuggerMessage(DebugEvent* event) { TRACE_EVENTS("TeamDebugger::_HandleDebuggerMessage(): %ld\n", event->EventType()); bool handled = false; ThreadHandler* handler = _GetThreadHandler(event->Thread()); BReference<ThreadHandler> handlerReference(handler); switch (event->EventType()) { case B_DEBUGGER_MESSAGE_THREAD_DEBUGGED: TRACE_EVENTS("B_DEBUGGER_MESSAGE_THREAD_DEBUGGED: thread: %ld\n", event->Thread()); if (handler != NULL) { handled = handler->HandleThreadDebugged( dynamic_cast<ThreadDebuggedEvent*>(event)); } break; case B_DEBUGGER_MESSAGE_DEBUGGER_CALL: TRACE_EVENTS("B_DEBUGGER_MESSAGE_DEBUGGER_CALL: thread: %ld\n", event->Thread()); if (handler != NULL) { handled = handler->HandleDebuggerCall( dynamic_cast<DebuggerCallEvent*>(event)); } break; case B_DEBUGGER_MESSAGE_BREAKPOINT_HIT: TRACE_EVENTS("B_DEBUGGER_MESSAGE_BREAKPOINT_HIT: thread: %ld\n", event->Thread()); if (handler != NULL) { handled = handler->HandleBreakpointHit( dynamic_cast<BreakpointHitEvent*>(event)); } break; case B_DEBUGGER_MESSAGE_WATCHPOINT_HIT: TRACE_EVENTS("B_DEBUGGER_MESSAGE_WATCHPOINT_HIT: thread: %ld\n", event->Thread()); if (handler != NULL) { handled = handler->HandleWatchpointHit( dynamic_cast<WatchpointHitEvent*>(event)); } break; case B_DEBUGGER_MESSAGE_SINGLE_STEP: TRACE_EVENTS("B_DEBUGGER_MESSAGE_SINGLE_STEP: thread: %ld\n", event->Thread()); if (handler != NULL) { handled = handler->HandleSingleStep( dynamic_cast<SingleStepEvent*>(event)); } break; case B_DEBUGGER_MESSAGE_EXCEPTION_OCCURRED: TRACE_EVENTS("B_DEBUGGER_MESSAGE_EXCEPTION_OCCURRED: thread: %ld\n", event->Thread()); if (handler != NULL) { handled = handler->HandleExceptionOccurred( dynamic_cast<ExceptionOccurredEvent*>(event)); } break; // case B_DEBUGGER_MESSAGE_TEAM_CREATED: //printf("B_DEBUGGER_MESSAGE_TEAM_CREATED: team: %ld\n", message.team_created.new_team); // break; case B_DEBUGGER_MESSAGE_TEAM_DELETED: // TODO: Handle! TRACE_EVENTS("B_DEBUGGER_MESSAGE_TEAM_DELETED: team: %ld\n", event->Team()); break; case B_DEBUGGER_MESSAGE_TEAM_EXEC: TRACE_EVENTS("B_DEBUGGER_MESSAGE_TEAM_EXEC: team: %ld\n", event->Team()); // TODO: Handle! break; case B_DEBUGGER_MESSAGE_THREAD_CREATED: { ThreadCreatedEvent* threadEvent = dynamic_cast<ThreadCreatedEvent*>(event); TRACE_EVENTS("B_DEBUGGER_MESSAGE_THREAD_CREATED: thread: %ld\n", threadEvent->NewThread()); handled = _HandleThreadCreated(threadEvent); break; } case DEBUGGER_MESSAGE_THREAD_RENAMED: { ThreadRenamedEvent* threadEvent = dynamic_cast<ThreadRenamedEvent*>(event); TRACE_EVENTS("DEBUGGER_MESSAGE_THREAD_RENAMED: thread: %ld " "(\"%s\")\n", threadEvent->RenamedThread(), threadEvent->NewName()); handled = _HandleThreadRenamed(threadEvent); break; } case DEBUGGER_MESSAGE_THREAD_PRIORITY_CHANGED: { ThreadPriorityChangedEvent* threadEvent = dynamic_cast<ThreadPriorityChangedEvent*>(event); TRACE_EVENTS("B_DEBUGGER_MESSAGE_THREAD_PRIORITY_CHANGED: thread:" " %ld\n", threadEvent->ChangedThread()); handled = _HandleThreadPriorityChanged(threadEvent); break; } case B_DEBUGGER_MESSAGE_THREAD_DELETED: TRACE_EVENTS("B_DEBUGGER_MESSAGE_THREAD_DELETED: thread: %ld\n", event->Thread()); handled = _HandleThreadDeleted( dynamic_cast<ThreadDeletedEvent*>(event)); break; case B_DEBUGGER_MESSAGE_IMAGE_CREATED: { ImageCreatedEvent* imageEvent = dynamic_cast<ImageCreatedEvent*>(event); TRACE_EVENTS("B_DEBUGGER_MESSAGE_IMAGE_CREATED: image: \"%s\" " "(%ld)\n", imageEvent->GetImageInfo().Name().String(), imageEvent->GetImageInfo().ImageID()); handled = _HandleImageCreated(imageEvent); break; } case B_DEBUGGER_MESSAGE_IMAGE_DELETED: { ImageDeletedEvent* imageEvent = dynamic_cast<ImageDeletedEvent*>(event); TRACE_EVENTS("B_DEBUGGER_MESSAGE_IMAGE_DELETED: image: \"%s\" " "(%ld)\n", imageEvent->GetImageInfo().Name().String(), imageEvent->GetImageInfo().ImageID()); handled = _HandleImageDeleted(imageEvent); break; } case B_DEBUGGER_MESSAGE_PRE_SYSCALL: case B_DEBUGGER_MESSAGE_POST_SYSCALL: case B_DEBUGGER_MESSAGE_SIGNAL_RECEIVED: case B_DEBUGGER_MESSAGE_PROFILER_UPDATE: case B_DEBUGGER_MESSAGE_HANDED_OVER: // not interested break; default: WARNING("TeamDebugger for team %ld: unknown event type: " "%ld\n", fTeamID, event->EventType()); break; } if (!handled && event->ThreadStopped()) fDebuggerInterface->ContinueThread(event->Thread()); }