void TemplateActor::handleNotification(VisualNotification& aNotification) { //VisualActor::handleNotification(aNotification); // debug VisualNotificationKey notificationKey = aNotification.getKey(); switch (notificationKey) { case kStringWithIdentifierLoadedAndCreatedMsg: if (aNotification.getIdentifier() == this->similarArtistsStringRequestId) { this->handleSimilarArtistsStringCompleted(); } break; case kAudioPlayTrackChangedEvt: this->createStringOfSimilarArtists(); break; default: char notificationString[64]; VisualNotification::convertNotificationKeyToString(notificationKey, notificationString); char errLog[256]; sprintf(errLog, "Unhandled VisualNotificationKey %s in file: %s (line: %d) [%s])", notificationString, __FILE__, __LINE__, __FUNCTION__); writeLog(errLog); break; } }
void TrackLyricsActor::handleNotification(const VisualNotification& aNotification) { //VisualActor::handleNotification(aNotification); // debug VisualString trackLyricsStr; const VisualString missingValueString("missing value"); // "missing value" is literally sent with streams that do not convey any lyrics VisualNotificationKey notificationKey = aNotification.getKey(); switch (notificationKey) { case kAudioMetadataIsAvailableMsg: VisualDataStore::createLyricsOfCurrentTrack(); break; case kLyricsAreAvailableMsg: trackLyricsStr = VisualDataStore::getLyricsOfCurrentTrack(); if (trackLyricsStr.getNumberOfNonWhitespaceCharacters() > 0 && trackLyricsStr != missingValueString) { OSStatus status = this->trackLyrics->makeTextureOfTrackLyrics(trackLyricsStr); if (status == noErr) { this->trackLyrics->calcPositionOnScreen(); VisualNotification::post(kLyricsTextureIsAvailableMsg); } } break; case kLyricsTextureIsAvailableMsg: this->textureOfCurrentTrackLyricsIsAvailable = true; this->trackLyrics->fadeIn(VisualDataStore::getPreferenceValueInt(VisualConfiguration::kFadeInTimeOnPlayInMS)); break; case kAudioPlayStartedEvt: this->trackLyrics->clear(); this->textureOfCurrentTrackLyricsIsAvailable = false; break; case kAudioPlayStoppedEvt: this->trackLyrics->clear(); this->textureOfCurrentTrackLyricsIsAvailable = false; break; case kAudioPlayPausedEvt: this->trackLyrics->fadeOut(VisualDataStore::getPreferenceValueInt(VisualConfiguration::kFadeOutTimeOnPauseInMS), 0.15f); break; case kAudioPlayResumedEvt: this->trackLyrics->fadeIn(VisualDataStore::getPreferenceValueInt(VisualConfiguration::kFadeInTimeOnResumeInMS)); break; case kAudioPlayReachedFadeOutTimeBeforeEndOfTrackEvt: this->trackLyrics->fadeOut(VisualDataStore::getPreferenceValueInt(VisualConfiguration::kFadeOutTimeBeforeEndOfTrackInMS)); break; case kCanvasReshapeEvt: if (textureOfCurrentTrackLyricsIsAvailable == true) { this->trackLyrics->calcPositionOnScreen(); } break; case kTrackInfoTextureChangedMsg: if (textureOfCurrentTrackLyricsIsAvailable == true) { this->trackLyrics->calcPositionOnScreen(); } break; default: writeLog("unhandled Notification in TrackLyricsActor"); break; } }
void VisualActor::handleNotification(VisualNotification& aNotification) { // hook method that can be implemented by subclass // notification is logged in case the actor registered for a notification but did not implement it VisualNotificationKey aKey = aNotification.getKey(); char notificationStr[64]; char logStr[128]; VisualNotification::convertNotificationKeyToString(aKey, notificationStr); sprintf(logStr, "VisualActor::handleNotification: %s -- %s", this->actorName, notificationStr); writeLog(logStr); }
void TrackTitleActor::handleNotification(const VisualNotification& aNotification) { //VisualActor::handleNotification(aNotification); // debug VisualNotificationKey notificationKey = aNotification.getKey(); switch (notificationKey) { case kAudioMetadataIsAvailableMsg: { const VisualString trackName = VisualDataStore::getNameOfCurrentTrack(); if (trackName.getNumberOfNonWhitespaceCharacters() > 0) { OSStatus status = this->trackTitle->makeTextureOfTrackTitle(trackName); if (status == noErr) { this->trackTitle->calcPositionOnScreen(); VisualDataStore::setValueInt(VisualConfiguration::kTrackInfoTextureHeight, this->trackTitle->getTrackInfoTextureHeightInPixels()); VisualNotification::post(kTrackInfoTextureIsAvailableMsg); } else { VisualDataStore::setValueInt(VisualConfiguration::kTrackInfoTextureHeight, 0); } VisualNotification::post(kTrackInfoTextureChangedMsg); } } break; case kTrackInfoTextureIsAvailableMsg: this->textureOfCurrentTrackTitleIsAvailable = true; this->trackTitle->fadeIn(VisualDataStore::getPreferenceValueInt(VisualConfiguration::kFadeInTimeOnPlayInMS)); break; case kAudioPlayStartedEvt: this->trackTitle->clear(); this->textureOfCurrentTrackTitleIsAvailable = false; break; case kAudioPlayStoppedEvt: this->trackTitle->clear(); this->textureOfCurrentTrackTitleIsAvailable = false; break; case kAudioPlayPausedEvt: this->trackTitle->pulsate(); break; case kAudioPlayResumedEvt: this->trackTitle->fadeIn(VisualDataStore::getPreferenceValueInt(VisualConfiguration::kFadeInTimeOnResumeInMS)); break; case kAudioPlayReachedFadeOutTimeBeforeEndOfTrackEvt: this->trackTitle->fadeOut(VisualDataStore::getPreferenceValueInt(VisualConfiguration::kFadeOutTimeBeforeEndOfTrackInMS)); break; case kCanvasReshapeEvt: this->trackTitle->calcPositionOnScreen(); VisualDataStore::setValueInt(VisualConfiguration::kTrackInfoTextureHeight, this->trackTitle->getTrackInfoTextureHeightInPixels()); break; default: writeLog("unhandled Notification in TrackTitleActor"); break; } }
void VisualStageControl::dispatchNotification(const VisualNotification& aNotification) { VisualActor* aVisualActor; const char* aVisualActorName; ProcessMonitorActor* aProcessMonitorActor; VisualNotificationKey keyOfNotification; theVisualStageControl = VisualStageControl::getInstance(); keyOfNotification = aNotification.getKey(); switch (keyOfNotification) { case kToggleShowProcessMonitorMsg: aVisualActor = theVisualStageControl->aVisualEnsemble->getVisualActorByName("PROCESSMONITOR"); if (aVisualActor) { aProcessMonitorActor = dynamic_cast<ProcessMonitorActor*>(aVisualActor); if (aProcessMonitorActor->getState() == kVisActNoShow) { aProcessMonitorActor->setState(kVisActOn); } else { aProcessMonitorActor->setState(kVisActNoShow); } } break; case kToggleProcessMonitorAudioInfoMsg: theVisualStageControl->aVisualEnsemble->resetVisualActorIterIndex(); while ((aVisualActor = theVisualStageControl->aVisualEnsemble->getNextVisualActor())) { aVisualActorName = aVisualActor->getName(); if (strcmp(aVisualActorName, "PROCESSMONITOR") == 0) { aProcessMonitorActor = dynamic_cast<ProcessMonitorActor*>(aVisualActor); if (aProcessMonitorActor->isAudioInfoShown() == true) { aProcessMonitorActor->setShowAudioInfo(false); } else { aProcessMonitorActor->setShowAudioInfo(true); } } } break; default: // let the whole ensemble know about the notification if (theVisualStageControl->aVisualEnsemble) { theVisualStageControl->aVisualEnsemble->dispatchNotification(aNotification); } } }