void OutputView::MessageReceived(BMessage *message) { switch (message->what) { case kCheckBoxAreaSelectionChanged: _UpdatePreview(NULL); break; case kMsgControllerVideoDepthChanged: UpdateSettings(); break; case kRebuildCodec: case kFileTypeChanged: fController->SetMediaFormatFamily(FormatFamily()); UpdateSettings(); break; case kFileNameChanged: fController->SetOutputFileName(fFileName->Text()); break; case kMinimizeOnRecording: Settings().SetMinimizeOnRecording(fMinimizeOnStart->Value() == B_CONTROL_ON); break; case kCodecChanged: { media_codec_info *info; ssize_t size; if (message->FindData(kCodecData, B_SIMPLE_DATA, (const void **)&info, &size) == B_OK) fController->SetMediaCodecInfo(*info); break; } case B_OBSERVER_NOTICE_CHANGE: { int32 code; message->FindInt32("be:observe_change_what", &code); switch (code) { case kSelectionWindowClosed: case kMsgControllerTargetFrameChanged: case kClipSizeChanged: _UpdatePreview(message); break; default: break; } break; } default: BView::MessageReceived(message); break; } }
void OutputView::WindowActivated(bool active) { if (fWindow->Value() != B_CONTROL_ON) { BRect rect = _CaptureRect(); _UpdatePreview(&rect); } }
void OutputView::MessageReceived(BMessage *message) { switch (message->what) { case kOpenFilePanel: { BMessenger target(this); BFilePanel* filePanel = new BFilePanel(B_SAVE_PANEL, &target, NULL, 0, false, NULL); filePanel->Show(); break; } case kCheckBoxAreaSelectionChanged: { BRect rect = fCustomCaptureRect; if (fWholeScreen->Value() == B_CONTROL_ON) { rect = BScreen().Frame(); fSelectArea->SetEnabled(false); } else { fSelectArea->SetEnabled(true); if (fCustomArea->Value() == B_CONTROL_ON) { fSelectArea->SetLabel("Select Region"); fSelectArea->SetMessage(new BMessage(kSelectArea)); } else if (fWindow->Value() == B_CONTROL_ON) { fSelectArea->SetLabel("Select Window"); fSelectArea->SetMessage(new BMessage(kSelectWindow)); } } fController->SetCaptureArea(rect); break; } case kFileNameChanged: fController->SetOutputFileName(fFileName->Text()); break; case kMinimizeOnRecording: Settings().SetMinimizeOnRecording(fMinimizeOnStart->Value() == B_CONTROL_ON); break; case kScaleChanged: { int32 value; message->FindInt32("be:value", &value); fController->SetScale((float)value); break; } case B_OBSERVER_NOTICE_CHANGE: { int32 code; message->FindInt32("be:observe_change_what", &code); switch (code) { case kMsgControllerSourceFrameChanged: { BRect rect; if (message->FindRect("frame", &rect) == B_OK) { if (rect != BScreen().Frame()) fCustomCaptureRect = rect; } _UpdatePreview(&rect); break; } case kMsgControllerSelectionWindowClosed: { BRect rect; BBitmap* bitmap = NULL; if (message != NULL && message->FindRect("selection", &rect) == B_OK && message->FindPointer("bitmap", (void**)&bitmap) == B_OK) { _UpdatePreview(&rect, bitmap); delete bitmap; } break; } case kMsgControllerMediaFileFormatChanged: _SetFileNameExtension(fController->MediaFileFormat().file_extension); fController->SetOutputFileName(fFileName->Text()); break; default: break; } break; } case B_SAVE_REQUESTED: { entry_ref ref; const char* name = NULL; message->FindRef("directory", &ref); message->FindString("name", &name); BPath path(&ref); path.Append(name); fFileName->SetText(path.Path()); BFilePanel* filePanel = NULL; if (message->FindPointer("source", (void**)&filePanel) == B_OK) delete filePanel; _SetFileNameExtension(fController->MediaFileFormat().file_extension); // TODO: why does the textcontrol not send the modification message ? fController->SetOutputFileName(fFileName->Text()); break; } case B_CANCEL: { BFilePanel* filePanel = NULL; if (message->FindPointer("source", (void**)&filePanel) == B_OK) delete filePanel; break; } default: BView::MessageReceived(message); break; } }