void TeamsListView::MessageReceived(BMessage* message) { switch (message->what) { case MSG_TEAM_ADDED: { TeamInfo* info; team_id team; if (message->FindInt32("team", &team) != B_OK) break; TargetHost* host = fInterface->GetTargetHost(); AutoLocker<TargetHost> hostLocker(host); info = host->TeamInfoByID(team); if (info == NULL) break; TeamRow* row = new TeamRow(info); AddRow(row); break; } case MSG_TEAM_REMOVED: { team_id team; if (message->FindInt32("team", &team) != B_OK) break; TeamRow* row = FindTeamRow(team); if (row != NULL) { RemoveRow(row); delete row; } break; } case MSG_TEAM_RENAMED: { TeamInfo* info; team_id team; if (message->FindInt32("team", &team) != B_OK) break; TargetHost* host = fInterface->GetTargetHost(); AutoLocker<TargetHost> hostLocker(host); info = host->TeamInfoByID(team); if (info == NULL) break; TeamRow* row = FindTeamRow(info->TeamID()); if (row != NULL && row->NeedsUpdate(info)) UpdateRow(row); break; } default: Inherited::MessageReceived(message); } }
TeamRow* TeamsListView::FindTeamRow(team_id teamId) { for (int32 i = CountRows(); i-- > 0;) { TeamRow* row = dynamic_cast<TeamRow*>(RowAt(i)); if (row == NULL) continue; if (row->TeamID() == teamId) return row; } return NULL; }
void TeamsWindow::MessageReceived(BMessage* message) { switch (message->what) { case MSG_DEBUG_THIS_TEAM: { TeamRow* row = dynamic_cast<TeamRow*>( fTeamsListView->CurrentSelection()); if (row != NULL) { BMessage message(MSG_DEBUG_THIS_TEAM); message.AddInt32("team", row->TeamID()); message.AddPointer("interface", fTargetHostInterface); be_app_messenger.SendMessage(&message); } break; } case MSG_TEAM_SELECTION_CHANGED: { TeamRow* row = dynamic_cast<TeamRow*>( fTeamsListView->CurrentSelection()); bool enabled = false; if (row != NULL) { team_id id = row->TeamID(); if (id != fCurrentTeam && id != B_SYSTEM_TEAM) enabled = true; } fAttachTeamButton->SetEnabled(enabled); break; } case MSG_SHOW_START_TEAM_WINDOW: { BMessage startMessage(*message); startMessage.AddPointer("interface", fTargetHostInterface); be_app_messenger.SendMessage(&startMessage); break; } case MSG_CHOSE_CORE_FILE: case B_CANCEL: { delete fCoreSelectionPanel; fCoreSelectionPanel = NULL; if (message->what == B_CANCEL) break; entry_ref ref; if (message->FindRef("refs", &ref) != B_OK) break; BMessage coreMessage(MSG_LOAD_CORE_TEAM); coreMessage.AddPointer("interface", fTargetHostInterface); coreMessage.AddRef("core", &ref); be_app_messenger.SendMessage(&coreMessage); break; } case MSG_LOAD_CORE_TEAM: { try { BMessenger messenger(this); fCoreSelectionPanel = new BFilePanel(B_OPEN_PANEL, &messenger, NULL, 0, false, new BMessage(MSG_CHOSE_CORE_FILE)); fCoreSelectionPanel->Show(); } catch (...) { delete fCoreSelectionPanel; fCoreSelectionPanel = NULL; } break; } case MSG_SWITCH_TARGET_CONNECTION: { TargetHostInterface* interface; if (message->FindPointer("interface", reinterpret_cast<void**>( &interface)) != B_OK) { break; } if (interface == fTargetHostInterface) break; fTargetHostInterface = interface; _NotifySelectedInterfaceChanged(interface); fLoadCoreButton->SetEnabled(fTargetHostInterface->IsLocal()); break; } default: BWindow::MessageReceived(message); break; } }