void MediaWindow::MessageReceived(BMessage* message) { switch (message->what) { case ML_RESTART_THREAD_FINISHED: fRestartThread = -1; _InitMedia(false); break; case ML_RESTART_MEDIA_SERVER: { fRestartThread = spawn_thread(&MediaWindow::_RestartMediaServices, "restart_thread", B_NORMAL_PRIORITY, this); if (fRestartThread < 0) fprintf(stderr, "couldn't create restart thread\n"); else resume_thread(fRestartThread); break; } case B_MEDIA_WEB_CHANGED: case ML_SELECTED_NODE: { PRINT_OBJECT(*message); MediaListItem* item = static_cast<MediaListItem*>( fListView->ItemAt(fListView->CurrentSelection())); if (item == NULL) break; fCurrentNode.SetTo(NULL); _ClearParamView(); item->AlterWindow(this); break; } case B_MEDIA_SERVER_STARTED: case B_MEDIA_SERVER_QUIT: { PRINT_OBJECT(*message); _InitMedia(false); break; } default: BWindow::MessageReceived(message); break; } }
void MediaWindow::_InitWindow() { fListView = new BListView("media_list_view"); fListView->SetSelectionMessage(new BMessage(ML_SELECTED_NODE)); fListView->SetExplicitMinSize(BSize(140, B_SIZE_UNSET)); // Add ScrollView to Media Menu for pretty border BScrollView* scrollView = new BScrollView("listscroller", fListView, 0, false, false, B_FANCY_BORDER); // Create the Views fTitleView = new BSeparatorView(B_HORIZONTAL, B_FANCY_BORDER); fTitleView->SetLabel(B_TRANSLATE("Audio settings")); fTitleView->SetFont(be_bold_font); fContentLayout = new BCardLayout(); new BView("content view", 0, fContentLayout); fContentLayout->Owner()->SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR)); fContentLayout->SetExplicitMaxSize(BSize(B_SIZE_UNLIMITED, B_SIZE_UNSET)); fAudioView = new AudioSettingsView(); fContentLayout->AddView(fAudioView); fVideoView = new VideoSettingsView(); fContentLayout->AddView(fVideoView); fMidiView = new MidiSettingsView(); fContentLayout->AddView(fMidiView); // Layout all views BLayoutBuilder::Group<>(this, B_HORIZONTAL) .SetInsets(B_USE_DEFAULT_SPACING, B_USE_DEFAULT_SPACING, B_USE_DEFAULT_SPACING, B_USE_DEFAULT_SPACING) .Add(scrollView, 0.0f) .AddGroup(B_VERTICAL) .SetInsets(0, 0, 0, 0) .Add(fTitleView) .Add(fContentLayout); // Start the window fInitCheck = _InitMedia(true); if (fInitCheck != B_OK) PostMessage(B_QUIT_REQUESTED); else if (IsHidden()) Show(); }
void MediaWindow::MessageReceived(BMessage* message) { switch (message->what) { case ML_INIT_MEDIA: _InitMedia(false); break; case ML_RESTART_MEDIA_SERVER: { thread_id thread = spawn_thread(&MediaWindow::_RestartMediaServices, "restart_thread", B_NORMAL_PRIORITY, this); if (thread < 0) fprintf(stderr, "couldn't create restart thread\n"); else resume_thread(thread); break; } case B_MEDIA_WEB_CHANGED: case ML_SELECTED_NODE: { PRINT_OBJECT(*message); MediaListItem* item = static_cast<MediaListItem*>( fListView->ItemAt(fListView->CurrentSelection())); if (item == NULL) break; fCurrentNode.SetTo(NULL); _ClearParamView(); item->AlterWindow(this); break; } case B_SOME_APP_LAUNCHED: { PRINT_OBJECT(*message); BString mimeSig; if (message->FindString("be:signature", &mimeSig) == B_OK && (mimeSig == "application/x-vnd.Be.addon-host" || mimeSig == "application/x-vnd.Be.media-server")) { _Notify(0.75, B_TRANSLATE("Starting media server" B_UTF8_ELLIPSIS)); } break; } case B_SOME_APP_QUIT: { PRINT_OBJECT(*message); BString mimeSig; if (message->FindString("be:signature", &mimeSig) == B_OK) { if (mimeSig == "application/x-vnd.Be.addon-host" || mimeSig == "application/x-vnd.Be.media-server") { BMediaRoster* roster = BMediaRoster::CurrentRoster(); if (roster != NULL && roster->Lock()) roster->Quit(); } } break; } default: BWindow::MessageReceived(message); break; } }