Author: stippi Date: 2009-10-20 21:58:12 +0200 (Tue, 20 Oct 2009) New Revision: 33682 Changeset: http://dev.haiku-os.org/changeset/33682/haiku Modified: haiku/trunk/src/apps/codycam/CodyCam.cpp haiku/trunk/src/apps/codycam/CodyCam.h haiku/trunk/src/apps/codycam/VideoConsumer.cpp Log: Applied patch by V, which adds a "Local" mode to CodyCam and resolves ticket #3395. I've extended the patch to disable the FTP controls in Local mode and fix bugs which prevented this from working correctly. Some coding style fixes as well... Thanks a lot, V! Modified: haiku/trunk/src/apps/codycam/CodyCam.cpp =================================================================== --- haiku/trunk/src/apps/codycam/CodyCam.cpp 2009-10-20 19:05:35 UTC (rev 33681) +++ haiku/trunk/src/apps/codycam/CodyCam.cpp 2009-10-20 19:58:12 UTC (rev 33682) @@ -155,12 +155,9 @@ (const char*) "CodyCam", B_TITLED_WINDOW, B_NOT_ZOOMABLE | B_AUTO_UPDATE_SIZE_LIMITS, &fPort); - status_t status = _SetUpNodes(); - if (status != B_OK) - return; + _SetUpNodes(); ((VideoWindow*)fWindow)->ApplyControls(); - } @@ -414,9 +411,10 @@ // #pragma mark - Video Window Class -VideoWindow::VideoWindow (BRect frame, const char* title, window_type type, uint32 flags, - port_id* consumerPort) - : BWindow(frame,title,type,flags), +VideoWindow::VideoWindow(BRect frame, const char* title, window_type type, + uint32 flags, port_id* consumerPort) + : + BWindow(frame, title, type, flags), fPortPtr(consumerPort), fView(NULL), fVideoView(NULL) @@ -469,12 +467,12 @@ menuBar->AddItem(menu); /* give it a gray background view */ - fView = new BView("Background View", B_WILL_DRAW, NULL); + fView = new BView("Background View", B_WILL_DRAW); fView->SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR)); /* add some controls */ _BuildCaptureControls(fView); - + SetLayout(new BGroupLayout(B_VERTICAL)); AddChild(menuBar); AddChild(fView); @@ -502,9 +500,7 @@ void VideoWindow::MessageReceived(BMessage* message) { - BControl* control; - - control = NULL; + BControl* control = NULL; message->FindPointer((const char*)"source", (void **)&control); switch (message->what) { @@ -586,10 +582,9 @@ break; case msg_upl_client: - if (control != NULL) { - message->FindInt32("client", &(fFtpInfo.uploadClient)); - FTPINFO("upl client = %ld\n", fFtpInfo.uploadClient); - } + message->FindInt32("client", &(fFtpInfo.uploadClient)); + FTPINFO("upl client = %ld\n", fFtpInfo.uploadClient); + _UploadClientChanged(); break; case msg_server: @@ -677,9 +672,11 @@ AddTranslationItems(fImageFormatMenu, B_TRANSLATOR_BITMAP); fImageFormatMenu->SetTargetForItems(this); - if (fImageFormatSettings->Value() && fImageFormatMenu->FindItem(fImageFormatSettings->Value()) != NULL) - fImageFormatMenu->FindItem(fImageFormatSettings->Value())->SetMarked(true); - else if (fImageFormatMenu->FindItem("JPEG Image") != NULL) + if (fImageFormatSettings->Value() + && fImageFormatMenu->FindItem(fImageFormatSettings->Value()) != NULL) { + fImageFormatMenu->FindItem( + fImageFormatSettings->Value())->SetMarked(true); + } else if (fImageFormatMenu->FindItem("JPEG Image") != NULL) fImageFormatMenu->FindItem("JPEG Image")->SetMarked(true); else if (fImageFormatMenu->FindItem("JPEG image") != NULL) fImageFormatMenu->FindItem("JPEG image")->SetMarked(true); @@ -690,19 +687,32 @@ fImageFormatMenu, NULL); fCaptureRateMenu = new BPopUpMenu("Capture Rate Menu"); - fCaptureRateMenu->AddItem(new BMenuItem("Every 15 seconds", new BMessage(msg_rate_15s))); - fCaptureRateMenu->AddItem(new BMenuItem("Every 30 seconds", new BMessage(msg_rate_30s))); - fCaptureRateMenu->AddItem(new BMenuItem("Every minute", new BMessage(msg_rate_1m))); - fCaptureRateMenu->AddItem(new BMenuItem("Every 5 minutes", new BMessage(msg_rate_5m))); - fCaptureRateMenu->AddItem(new BMenuItem("Every 10 minutes", new BMessage(msg_rate_10m))); - fCaptureRateMenu->AddItem(new BMenuItem("Every 15 minutes", new BMessage(msg_rate_15m))); - fCaptureRateMenu->AddItem(new BMenuItem("Every 30 minutes", new BMessage(msg_rate_30m))); - fCaptureRateMenu->AddItem(new BMenuItem("Every hour", new BMessage(msg_rate_1h))); - fCaptureRateMenu->AddItem(new BMenuItem("Every 2 hours", new BMessage(msg_rate_2h))); - fCaptureRateMenu->AddItem(new BMenuItem("Every 4 hours", new BMessage(msg_rate_4h))); - fCaptureRateMenu->AddItem(new BMenuItem("Every 8 hours", new BMessage(msg_rate_8h))); - fCaptureRateMenu->AddItem(new BMenuItem("Every 24 hours", new BMessage(msg_rate_24h))); - fCaptureRateMenu->AddItem(new BMenuItem("Never", new BMessage(msg_rate_never))); + fCaptureRateMenu->AddItem(new BMenuItem("Every 15 seconds", + new BMessage(msg_rate_15s))); + fCaptureRateMenu->AddItem(new BMenuItem("Every 30 seconds", + new BMessage(msg_rate_30s))); + fCaptureRateMenu->AddItem(new BMenuItem("Every minute", + new BMessage(msg_rate_1m))); + fCaptureRateMenu->AddItem(new BMenuItem("Every 5 minutes", + new BMessage(msg_rate_5m))); + fCaptureRateMenu->AddItem(new BMenuItem("Every 10 minutes", + new BMessage(msg_rate_10m))); + fCaptureRateMenu->AddItem(new BMenuItem("Every 15 minutes", + new BMessage(msg_rate_15m))); + fCaptureRateMenu->AddItem(new BMenuItem("Every 30 minutes", + new BMessage(msg_rate_30m))); + fCaptureRateMenu->AddItem(new BMenuItem("Every hour", + new BMessage(msg_rate_1h))); + fCaptureRateMenu->AddItem(new BMenuItem("Every 2 hours", + new BMessage(msg_rate_2h))); + fCaptureRateMenu->AddItem(new BMenuItem("Every 4 hours", + new BMessage(msg_rate_4h))); + fCaptureRateMenu->AddItem(new BMenuItem("Every 8 hours", + new BMessage(msg_rate_8h))); + fCaptureRateMenu->AddItem(new BMenuItem("Every 24 hours", + new BMessage(msg_rate_24h))); + fCaptureRateMenu->AddItem(new BMenuItem("Never", + new BMessage(msg_rate_never))); fCaptureRateMenu->SetTargetForItems(this); fCaptureRateMenu->FindItem(fCaptureRateSetting->Value())->SetMarked(true); fCaptureRateSelector = new BMenuField("Rate", "Rate:", @@ -730,10 +740,10 @@ fUploadClientSelector = new BMenuField("UploadClient", NULL, fUploadClientMenu, NULL); - fFtpSetupBox->SetLabel("FTP"); + fFtpSetupBox->SetLabel("Output"); // this doesn't work with the layout manager -// fFtpSetupBox->SetLabel(fUploadClientSelector); -fUploadClientSelector->SetLabel("Type:"); + // fFtpSetupBox->SetLabel(fUploadClientSelector); + fUploadClientSelector->SetLabel("Type:"); BGridLayout *ftpLayout = new BGridLayout(kXBuffer, 0); ftpLayout->SetInsets(10, 15, 5, 5); @@ -801,8 +811,11 @@ void VideoWindow::ApplyControls() { + if (!Lock()) + return; + // apply controls - fFileName->Invoke(); + fFileName->Invoke(); PostMessage(fImageFormatMenu->FindMarked()->Message()); PostMessage(fCaptureRateMenu->FindMarked()->Message()); PostMessage(fUploadClientMenu->FindMarked()->Message()); @@ -811,6 +824,8 @@ fPassword->Invoke(); fDirectory->Invoke(); fPassiveFtp->Invoke(); + + Unlock(); } @@ -854,6 +869,18 @@ void +VideoWindow::_UploadClientChanged() +{ + bool enableServerControls = fFtpInfo.uploadClient < 2; + fServerName->SetEnabled(enableServerControls); + fLoginId->SetEnabled(enableServerControls); + fPassword->SetEnabled(enableServerControls); + fDirectory->SetEnabled(enableServerControls); + fPassiveFtp->SetEnabled(enableServerControls); +} + + +void VideoWindow::_QuitSettings() { fServerSetting->ValueChanged(fServerName->Text()); Modified: haiku/trunk/src/apps/codycam/CodyCam.h =================================================================== --- haiku/trunk/src/apps/codycam/CodyCam.h 2009-10-20 19:05:35 UTC (rev 33681) +++ haiku/trunk/src/apps/codycam/CodyCam.h 2009-10-20 19:58:12 UTC (rev 33682) @@ -79,6 +79,7 @@ const char* kUploadClient[] = { "FTP", "SFTP", + "Local", 0 }; @@ -128,6 +129,7 @@ void _SetUpSettings(const char* filename, const char* dirname); + void _UploadClientChanged(); void _QuitSettings(); private: Modified: haiku/trunk/src/apps/codycam/VideoConsumer.cpp =================================================================== --- haiku/trunk/src/apps/codycam/VideoConsumer.cpp 2009-10-20 19:05:35 UTC (rev 33681) +++ haiku/trunk/src/apps/codycam/VideoConsumer.cpp 2009-10-20 19:58:12 UTC (rev 33682) @@ -606,9 +606,13 @@ void VideoConsumer::FtpThread() { + char fullPath[B_PATH_NAME_LENGTH]; FUNCTION("VideoConsumer::FtpThread\n"); - - if (LocalSave(fFileNameText, fFtpBitmap) == B_OK) + if (fUploadClient == 2) { + // 64 + 64 = 128 max + snprintf(fullPath, B_PATH_NAME_LENGTH, "%s/%s", fDirectoryText, fFileNameText); + LocalSave(fullPath, fFtpBitmap); + } else if (LocalSave(fFileNameText, fFtpBitmap) == B_OK) FtpSave(fFileNameText); #if 0 @@ -688,6 +692,8 @@ case 1: ftp = new SftpClient; break; + case 2: + return B_OK; default: fprintf(stderr, "invalid upload client %ld\n", fUploadClient); return EINVAL;