xref: /haiku/src/apps/mediaconverter/MediaConverterWindow.cpp (revision 1c992a5285e0c881abfbba1de9d9de04f85ed790)
16af4da5dSStephan Aßmus // Copyright 1999, Be Incorporated. All Rights Reserved.
26af4da5dSStephan Aßmus // Copyright 2000-2004, Jun Suzuki. All Rights Reserved.
36af4da5dSStephan Aßmus // Copyright 2007, Stephan Aßmus. All Rights Reserved.
46af4da5dSStephan Aßmus // This file may be used under the terms of the Be Sample Code License.
56af4da5dSStephan Aßmus #include "MediaConverterWindow.h"
66af4da5dSStephan Aßmus 
76af4da5dSStephan Aßmus #include <stdio.h>
86af4da5dSStephan Aßmus #include <string.h>
96af4da5dSStephan Aßmus 
106af4da5dSStephan Aßmus #include <Alert.h>
116af4da5dSStephan Aßmus #include <Application.h>
126af4da5dSStephan Aßmus #include <Box.h>
136af4da5dSStephan Aßmus #include <Button.h>
146af4da5dSStephan Aßmus #include <FilePanel.h>
156af4da5dSStephan Aßmus #include <Menu.h>
166af4da5dSStephan Aßmus #include <MenuBar.h>
176af4da5dSStephan Aßmus #include <MenuField.h>
186af4da5dSStephan Aßmus #include <MenuItem.h>
196af4da5dSStephan Aßmus #include <Path.h>
206af4da5dSStephan Aßmus #include <PopUpMenu.h>
216af4da5dSStephan Aßmus #include <Roster.h>
226af4da5dSStephan Aßmus #include <ScrollBar.h>
236af4da5dSStephan Aßmus #include <ScrollView.h>
246af4da5dSStephan Aßmus #include <Slider.h>
256af4da5dSStephan Aßmus #include <StringView.h>
266af4da5dSStephan Aßmus #include <TextControl.h>
276af4da5dSStephan Aßmus 
286af4da5dSStephan Aßmus #include "MediaFileInfoView.h"
296af4da5dSStephan Aßmus #include "MediaFileListView.h"
306af4da5dSStephan Aßmus #include "MessageConstants.h"
316af4da5dSStephan Aßmus #include "StatusView.h"
326af4da5dSStephan Aßmus #include "Strings.h"
336af4da5dSStephan Aßmus 
346af4da5dSStephan Aßmus 
356af4da5dSStephan Aßmus // #pragma mark - DirectoryFilter
366af4da5dSStephan Aßmus 
376af4da5dSStephan Aßmus 
3860b6f368SStephan Aßmus class DirectoryFilter : public BRefFilter {
396af4da5dSStephan Aßmus public:
406af4da5dSStephan Aßmus 	DirectoryFilter() {};
416af4da5dSStephan Aßmus 	virtual bool Filter(const entry_ref* ref,
4260b6f368SStephan Aßmus 		BNode* node, struct stat_beos* st, const char* filetype)
436af4da5dSStephan Aßmus 	{
446af4da5dSStephan Aßmus 		return node->IsDirectory();
456af4da5dSStephan Aßmus 	}
466af4da5dSStephan Aßmus };
476af4da5dSStephan Aßmus 
486af4da5dSStephan Aßmus 
496af4da5dSStephan Aßmus // #pragma mark - FileFormatMenuItem
506af4da5dSStephan Aßmus 
516af4da5dSStephan Aßmus 
526af4da5dSStephan Aßmus class FileFormatMenuItem : public BMenuItem {
536af4da5dSStephan Aßmus public:
546af4da5dSStephan Aßmus 	FileFormatMenuItem(media_file_format* format);
556af4da5dSStephan Aßmus 	virtual ~FileFormatMenuItem();
566af4da5dSStephan Aßmus 
576af4da5dSStephan Aßmus 	media_file_format fFileFormat;
586af4da5dSStephan Aßmus };
596af4da5dSStephan Aßmus 
606af4da5dSStephan Aßmus 
616af4da5dSStephan Aßmus FileFormatMenuItem::FileFormatMenuItem(media_file_format *format)
626af4da5dSStephan Aßmus 	: BMenuItem(format->pretty_name, new BMessage(FORMAT_SELECT_MESSAGE))
636af4da5dSStephan Aßmus {
646af4da5dSStephan Aßmus 	memcpy(&fFileFormat, format, sizeof(fFileFormat));
656af4da5dSStephan Aßmus }
666af4da5dSStephan Aßmus 
676af4da5dSStephan Aßmus 
686af4da5dSStephan Aßmus FileFormatMenuItem::~FileFormatMenuItem()
696af4da5dSStephan Aßmus {
706af4da5dSStephan Aßmus }
716af4da5dSStephan Aßmus 
726af4da5dSStephan Aßmus 
736af4da5dSStephan Aßmus // #pragma mark - CodecMenuItem
746af4da5dSStephan Aßmus 
756af4da5dSStephan Aßmus 
766af4da5dSStephan Aßmus class CodecMenuItem : public BMenuItem {
776af4da5dSStephan Aßmus 	public:
786af4da5dSStephan Aßmus 				CodecMenuItem(media_codec_info *ci, uint32 msg_type);
796af4da5dSStephan Aßmus 	virtual		~CodecMenuItem();
806af4da5dSStephan Aßmus 
816af4da5dSStephan Aßmus 	media_codec_info fCodecInfo;
826af4da5dSStephan Aßmus };
836af4da5dSStephan Aßmus 
846af4da5dSStephan Aßmus 
856af4da5dSStephan Aßmus CodecMenuItem::CodecMenuItem(media_codec_info *ci, uint32 msg_type)
866af4da5dSStephan Aßmus 	: BMenuItem(ci->pretty_name, new BMessage(msg_type))
876af4da5dSStephan Aßmus {
886af4da5dSStephan Aßmus 	memcpy(&fCodecInfo, ci, sizeof(fCodecInfo));
896af4da5dSStephan Aßmus }
906af4da5dSStephan Aßmus 
916af4da5dSStephan Aßmus 
926af4da5dSStephan Aßmus CodecMenuItem::~CodecMenuItem()
936af4da5dSStephan Aßmus {
946af4da5dSStephan Aßmus }
956af4da5dSStephan Aßmus 
966af4da5dSStephan Aßmus 
976af4da5dSStephan Aßmus // #pragma mark - MediaConverterWindow
986af4da5dSStephan Aßmus 
996af4da5dSStephan Aßmus 
1006af4da5dSStephan Aßmus MediaConverterWindow::MediaConverterWindow(BRect frame)
1016af4da5dSStephan Aßmus 	: BWindow(frame, "MediaConverter", B_TITLED_WINDOW_LOOK,
1026af4da5dSStephan Aßmus 		B_NORMAL_WINDOW_FEEL, B_NOT_ZOOMABLE | B_ASYNCHRONOUS_CONTROLS)
1036af4da5dSStephan Aßmus 
1046af4da5dSStephan Aßmus 	, fVideoQuality(75)
1056af4da5dSStephan Aßmus 	, fAudioQuality(75)
1066af4da5dSStephan Aßmus 
1076af4da5dSStephan Aßmus 	, fSaveFilePanel(NULL)
1086af4da5dSStephan Aßmus 	, fOpenFilePanel(NULL)
1096af4da5dSStephan Aßmus 
1106af4da5dSStephan Aßmus 	, fOutputDirSpecified(false)
1116af4da5dSStephan Aßmus 
1126af4da5dSStephan Aßmus 	, fEnabled(true)
1136af4da5dSStephan Aßmus 	, fConverting(false)
1146af4da5dSStephan Aßmus 	, fCancelling(false)
1156af4da5dSStephan Aßmus {
1166af4da5dSStephan Aßmus 	char defaultdirectory[] = "/boot/home";
1176af4da5dSStephan Aßmus 	fOutputDir.SetTo(defaultdirectory);
1186af4da5dSStephan Aßmus 
1196af4da5dSStephan Aßmus #if B_BEOS_VERSION >= 0x530 // 0x520 RC2 0x530 RC3
1206af4da5dSStephan Aßmus 	// load Locale files for ZETA
1216af4da5dSStephan Aßmus 	entry_ref mypath;
1226af4da5dSStephan Aßmus 	app_info info;
1236af4da5dSStephan Aßmus 
1246af4da5dSStephan Aßmus 	be_app->GetAppInfo(&info);
1256af4da5dSStephan Aßmus 	mypath = info.ref;
1266af4da5dSStephan Aßmus 
1276af4da5dSStephan Aßmus 	BPath path(&mypath);
1286af4da5dSStephan Aßmus 	path.GetParent(&path);
1296af4da5dSStephan Aßmus 	path.Append("Language/Dictionaries");
1306af4da5dSStephan Aßmus 	path.Append("MediaConverter");
1316af4da5dSStephan Aßmus 	be_locale.LoadLanguageFile(path.Path());
1326af4da5dSStephan Aßmus 
1336af4da5dSStephan Aßmus #endif
1346af4da5dSStephan Aßmus 
1356af4da5dSStephan Aßmus 	BRect dummyRect(0, 0, 10, 10);
1366af4da5dSStephan Aßmus 	fMenuBar = new BMenuBar(dummyRect, "menubar");
1376af4da5dSStephan Aßmus 	_CreateMenu();
1386af4da5dSStephan Aßmus 	AddChild(fMenuBar);
1396af4da5dSStephan Aßmus 
1406af4da5dSStephan Aßmus 	// background
1416af4da5dSStephan Aßmus 	BRect r(frame);
1426af4da5dSStephan Aßmus 	r.OffsetTo(0, 0);
1436af4da5dSStephan Aßmus 	BView *background = new BView(r, NULL, B_FOLLOW_ALL_SIDES, 0);
1446af4da5dSStephan Aßmus 	rgb_color c = ui_color(B_PANEL_BACKGROUND_COLOR);
1456af4da5dSStephan Aßmus 	background->SetViewColor(c);
1466af4da5dSStephan Aßmus 	background->SetLowColor(c);
1476af4da5dSStephan Aßmus 	r.InsetBy(5, 25);
1486af4da5dSStephan Aßmus 
1496af4da5dSStephan Aßmus 	// file list view box
1506af4da5dSStephan Aßmus 	BRect r2(r);
1516af4da5dSStephan Aßmus 	r2.bottom = r2.top + 420;
1526af4da5dSStephan Aßmus 	r2.right = r2.left + 150;
1536af4da5dSStephan Aßmus 	fBox1 = new BBox(r2, NULL, B_FOLLOW_ALL);
1546af4da5dSStephan Aßmus 
1556af4da5dSStephan Aßmus 	BRect r3(r2);
1566af4da5dSStephan Aßmus 	r3.OffsetTo(0, 0);
1576af4da5dSStephan Aßmus 	r3.InsetBy(8, 8);
1586af4da5dSStephan Aßmus 	r3.top += be_bold_font->Size() - 3;
1596af4da5dSStephan Aßmus 	bool useHorizontalScrollBar = false;
1606af4da5dSStephan Aßmus 	if (useHorizontalScrollBar)
1616af4da5dSStephan Aßmus 		r3.bottom -= B_H_SCROLL_BAR_HEIGHT;
1626af4da5dSStephan Aßmus 	r3.right -= B_V_SCROLL_BAR_WIDTH;
1636af4da5dSStephan Aßmus 	fListView = new MediaFileListView(r3, B_FOLLOW_ALL);
1646af4da5dSStephan Aßmus 	BScrollView *scroller = new BScrollView(NULL, fListView,
1656af4da5dSStephan Aßmus 		B_FOLLOW_ALL, 0, useHorizontalScrollBar, true);
1666af4da5dSStephan Aßmus 	fBox1->AddChild(scroller);
1676af4da5dSStephan Aßmus 	background->AddChild(fBox1);
1686af4da5dSStephan Aßmus 
1696af4da5dSStephan Aßmus 	// info box
1706af4da5dSStephan Aßmus 	r2.left = r2.right + 5;
1716af4da5dSStephan Aßmus 	r2.right = r.right - 5;
1726af4da5dSStephan Aßmus 	r2.bottom = r2.top + 120;
1736af4da5dSStephan Aßmus 	fBox2 = new BBox(r2, NULL, B_FOLLOW_RIGHT | B_FOLLOW_TOP);
1746af4da5dSStephan Aßmus 
1756af4da5dSStephan Aßmus 	r3 = r2;
1766af4da5dSStephan Aßmus 	r3.OffsetTo(0, 0);
1776af4da5dSStephan Aßmus 	r3.InsetBy(5, 5);
1786af4da5dSStephan Aßmus 	r3.top += 12;
1796af4da5dSStephan Aßmus 	fInfoView = new MediaFileInfoView(r3, B_FOLLOW_ALL);
1806af4da5dSStephan Aßmus 	fBox2->AddChild(fInfoView);
1816af4da5dSStephan Aßmus 	background->AddChild(fBox2);
1826af4da5dSStephan Aßmus 
1836af4da5dSStephan Aßmus 	r2.top = r2.bottom + 5;
1846af4da5dSStephan Aßmus 	r2.bottom = r2.top + 295;
1856af4da5dSStephan Aßmus 	fBox3 = new BBox(r2, NULL, B_FOLLOW_RIGHT | B_FOLLOW_TOP_BOTTOM);
1866af4da5dSStephan Aßmus 
1876af4da5dSStephan Aßmus 	r3 = r2;
1886af4da5dSStephan Aßmus 	r3.OffsetTo(0, 0);
1896af4da5dSStephan Aßmus 	r3.InsetBy(8, 8);
1906af4da5dSStephan Aßmus 	r3.top += be_bold_font->Size() - 3;
1916af4da5dSStephan Aßmus 
1926af4da5dSStephan Aßmus 	BRect r4(r3);
1936af4da5dSStephan Aßmus 	r4.bottom = r4.top + 20;
1946af4da5dSStephan Aßmus 	BPopUpMenu* popmenu = new BPopUpMenu("");
1956af4da5dSStephan Aßmus 	fFormatMenu = new BMenuField(r4, NULL, FORMAT_LABEL, popmenu,
1966af4da5dSStephan Aßmus 		B_FOLLOW_LEFT_RIGHT | B_FOLLOW_TOP);
1976af4da5dSStephan Aßmus 	fBox3->AddChild(fFormatMenu);
1986af4da5dSStephan Aßmus 
1996af4da5dSStephan Aßmus 	r4.top = r4.bottom + 5;
2006af4da5dSStephan Aßmus 	r4.bottom = r4.top + 20;
2016af4da5dSStephan Aßmus 	popmenu = new BPopUpMenu("");
2026af4da5dSStephan Aßmus 	fAudioMenu = new BMenuField(r4, NULL, AUDIO_LABEL, popmenu,
2036af4da5dSStephan Aßmus 		B_FOLLOW_LEFT_RIGHT | B_FOLLOW_TOP);
2046af4da5dSStephan Aßmus 	fBox3->AddChild(fAudioMenu);
2056af4da5dSStephan Aßmus 
2066af4da5dSStephan Aßmus 	r4.top = r4.bottom + 5;
2076af4da5dSStephan Aßmus 	r4.bottom = r4.top + 20;
2086af4da5dSStephan Aßmus 	popmenu = new BPopUpMenu("");
2096af4da5dSStephan Aßmus 	fVideoMenu = new BMenuField(r4, NULL, VIDEO_LABEL, popmenu,
2106af4da5dSStephan Aßmus 		B_FOLLOW_LEFT_RIGHT | B_FOLLOW_TOP);
2116af4da5dSStephan Aßmus 	fBox3->AddChild(fVideoMenu);
2126af4da5dSStephan Aßmus 
2136af4da5dSStephan Aßmus 	// output folder
2146af4da5dSStephan Aßmus 	r4.top = r4.bottom + 5;
2156af4da5dSStephan Aßmus 	r4.bottom = r4.top + 20;
2166af4da5dSStephan Aßmus 	r4.right = 80;
2176af4da5dSStephan Aßmus 	fDestButton = new BButton(r4, NULL, OUTPUT_FOLDER_LABEL,
2186af4da5dSStephan Aßmus 		new BMessage(OUTPUT_FOLDER_MESSAGE),
2196af4da5dSStephan Aßmus 		B_FOLLOW_LEFT | B_FOLLOW_TOP);
2206af4da5dSStephan Aßmus 	fBox3->AddChild(fDestButton);
2216af4da5dSStephan Aßmus 	fDestButton->ResizeToPreferred();
2226af4da5dSStephan Aßmus 	BRect buttonFrame2(fDestButton->Frame());
2236af4da5dSStephan Aßmus 	buttonFrame2.OffsetTo(r.right - buttonFrame2.Width(),
2246af4da5dSStephan Aßmus 		r.bottom - buttonFrame2.Height());
2256af4da5dSStephan Aßmus 
2266af4da5dSStephan Aßmus 	fOutputFolder = new BStringView(r4, NULL, defaultdirectory,
2276af4da5dSStephan Aßmus 		B_FOLLOW_LEFT_RIGHT | B_FOLLOW_TOP, B_WILL_DRAW);
2286af4da5dSStephan Aßmus 	fBox3->AddChild(fOutputFolder);
2296af4da5dSStephan Aßmus 	fOutputFolder->MoveBy(buttonFrame2.Width() + 10, 5);
2306af4da5dSStephan Aßmus 	fOutputFolder->ResizeToPreferred();
2316af4da5dSStephan Aßmus 
2326af4da5dSStephan Aßmus 	// start/end duration
2336af4da5dSStephan Aßmus 	r4.top = r4.bottom + 10;
2346af4da5dSStephan Aßmus 	r4.bottom = r4.top + 20;
2356af4da5dSStephan Aßmus 	r4.right = r3.right;
2366af4da5dSStephan Aßmus 	fStartDurationTC = new BTextControl(r4, NULL, "", "0", NULL,
2376af4da5dSStephan Aßmus 		B_FOLLOW_LEFT_RIGHT | B_FOLLOW_TOP);
2386af4da5dSStephan Aßmus 	fBox3->AddChild(fStartDurationTC);
2396af4da5dSStephan Aßmus 	fStartDurationTC->SetText("0");
2406af4da5dSStephan Aßmus 
2416af4da5dSStephan Aßmus 	r4.top = r4.bottom + 5;
2426af4da5dSStephan Aßmus 	r4.bottom = r4.top + 20;
2436af4da5dSStephan Aßmus 	fEndDurationTC = new BTextControl(r4, NULL, "", "0", NULL,
2446af4da5dSStephan Aßmus 		B_FOLLOW_LEFT_RIGHT | B_FOLLOW_TOP);
2456af4da5dSStephan Aßmus 	fBox3->AddChild(fEndDurationTC);
2466af4da5dSStephan Aßmus 	fEndDurationTC->SetText("0");
2476af4da5dSStephan Aßmus 
2486af4da5dSStephan Aßmus 	r4.top = r4.bottom + 5;
2496af4da5dSStephan Aßmus 	r4.bottom = r4.top + 50;
2506af4da5dSStephan Aßmus 
2516af4da5dSStephan Aßmus 	// Video Quality
2526af4da5dSStephan Aßmus 	fVideoQualitySlider = new BSlider(r4, "VSlider", "" ,
2536af4da5dSStephan Aßmus 		new BMessage(VIDEO_QUALITY_CHANGED_MESSAGE), 1, 100, B_HORIZONTAL,
2546af4da5dSStephan Aßmus 		B_BLOCK_THUMB, B_FOLLOW_LEFT_RIGHT | B_FOLLOW_TOP);
2556af4da5dSStephan Aßmus 	fVideoQualitySlider->SetValue(fVideoQuality);
2566af4da5dSStephan Aßmus 	fVideoQualitySlider->SetEnabled(false);
2576af4da5dSStephan Aßmus 	fBox3->AddChild(fVideoQualitySlider);
2586af4da5dSStephan Aßmus 
2596af4da5dSStephan Aßmus 	r4.top = r4.bottom + 5;
2606af4da5dSStephan Aßmus 	r4.bottom = r4.top + 50;
2616af4da5dSStephan Aßmus 
2626af4da5dSStephan Aßmus 	// Audio Quality
2636af4da5dSStephan Aßmus 	fAudioQualitySlider = new BSlider(r4,"ASlider", "" ,
2646af4da5dSStephan Aßmus 		new BMessage(AUDIO_QUALITY_CHANGED_MESSAGE), 1, 100, B_HORIZONTAL,
2656af4da5dSStephan Aßmus 		B_BLOCK_THUMB, B_FOLLOW_LEFT_RIGHT | B_FOLLOW_TOP);
2666af4da5dSStephan Aßmus 	fAudioQualitySlider->SetValue(fAudioQuality);
2676af4da5dSStephan Aßmus 	fAudioQualitySlider->SetEnabled(false);
2686af4da5dSStephan Aßmus 	fBox3->AddChild(fAudioQualitySlider);
2696af4da5dSStephan Aßmus 	background->AddChild(fBox3);
2706af4da5dSStephan Aßmus 
2716af4da5dSStephan Aßmus 	// buttons
2726af4da5dSStephan Aßmus 	r2.top = r2.bottom + 15;
2736af4da5dSStephan Aßmus 	r2.bottom = r2.top + 20;
2746af4da5dSStephan Aßmus 	r2.left = r.left - 120;
2756af4da5dSStephan Aßmus 	r2.right = r.right;
2766af4da5dSStephan Aßmus 
2776af4da5dSStephan Aßmus 	fPreviewButton = new BButton(r2, NULL, PREVIEW_BUTTON_LABEL,
2786af4da5dSStephan Aßmus 		new BMessage(PREVIEW_MESSAGE), B_FOLLOW_RIGHT | B_FOLLOW_BOTTOM);
2796af4da5dSStephan Aßmus 	background->AddChild(fPreviewButton);
2806af4da5dSStephan Aßmus 	fPreviewButton->SetEnabled(false);
2816af4da5dSStephan Aßmus 
2826af4da5dSStephan Aßmus 	fConvertButton = new BButton(r2, NULL, CONVERT_LABEL,
2836af4da5dSStephan Aßmus 		new BMessage(CONVERT_BUTTON_MESSAGE),
2846af4da5dSStephan Aßmus 		B_FOLLOW_RIGHT | B_FOLLOW_BOTTOM);
2856af4da5dSStephan Aßmus 	background->AddChild(fConvertButton);
2866af4da5dSStephan Aßmus 
2876af4da5dSStephan Aßmus 	// Status view
2886af4da5dSStephan Aßmus 	r2.bottom = r2.top + 20;
2896af4da5dSStephan Aßmus 	r2.left = r.left;
2906af4da5dSStephan Aßmus 	r2.right = r.right;
2916af4da5dSStephan Aßmus 
2926af4da5dSStephan Aßmus 	fStatusView2 = new StatusView(r2, B_FOLLOW_LEFT_RIGHT | B_FOLLOW_BOTTOM);
2936af4da5dSStephan Aßmus 	background->AddChild(fStatusView2);
2946af4da5dSStephan Aßmus 
2956af4da5dSStephan Aßmus 	r2.top += 15;
2966af4da5dSStephan Aßmus 	r2.bottom += 20;
2976af4da5dSStephan Aßmus 
2986af4da5dSStephan Aßmus 	fStatusView = new StatusView(r2, B_FOLLOW_LEFT_RIGHT | B_FOLLOW_BOTTOM);
2996af4da5dSStephan Aßmus 	background->AddChild(fStatusView);
3006af4da5dSStephan Aßmus 	AddChild(background);
3016af4da5dSStephan Aßmus 
3026af4da5dSStephan Aßmus 	SetStatusMessage("");
3036af4da5dSStephan Aßmus 	_UpdateLabels();
3046af4da5dSStephan Aßmus 
3056af4da5dSStephan Aßmus 	SetSizeLimits(frame.Width(), 32000, frame.Height(), 32000);
3066af4da5dSStephan Aßmus }
3076af4da5dSStephan Aßmus 
3086af4da5dSStephan Aßmus 
3096af4da5dSStephan Aßmus MediaConverterWindow::~MediaConverterWindow()
3106af4da5dSStephan Aßmus {
3113c0f9a7cSKarsten Heimrich 	delete fSaveFilePanel;
3123c0f9a7cSKarsten Heimrich 	delete fOpenFilePanel;
3136af4da5dSStephan Aßmus }
3146af4da5dSStephan Aßmus 
3156af4da5dSStephan Aßmus 
3166af4da5dSStephan Aßmus // #pragma mark -
3176af4da5dSStephan Aßmus 
3186af4da5dSStephan Aßmus 
3196af4da5dSStephan Aßmus /*
3206af4da5dSStephan Aßmus void
3216af4da5dSStephan Aßmus MediaConverterWindow::DispatchMessage(BMessage *msg, BHandler *handler)
3226af4da5dSStephan Aßmus {
3236af4da5dSStephan Aßmus 	if (msg->WasDropped() && msg->what == B_SIMPLE_DATA) {
3246af4da5dSStephan Aßmus 
3256af4da5dSStephan Aßmus 		printf("Dispatch 1\n");
3266af4da5dSStephan Aßmus 		DetachCurrentMessage();
3276af4da5dSStephan Aßmus 		msg->what = B_REFS_RECEIVED;
3286af4da5dSStephan Aßmus 		BMessenger(be_app).SendMessage(msg);
3296af4da5dSStephan Aßmus 		delete msg;
3306af4da5dSStephan Aßmus 	} else {
3316af4da5dSStephan Aßmus 		BWindow::DispatchMessage(msg, handler);
3326af4da5dSStephan Aßmus 	}
3336af4da5dSStephan Aßmus }
3346af4da5dSStephan Aßmus */
3356af4da5dSStephan Aßmus 
3366af4da5dSStephan Aßmus 
3376af4da5dSStephan Aßmus void
3386af4da5dSStephan Aßmus MediaConverterWindow::MessageReceived(BMessage *msg)
3396af4da5dSStephan Aßmus {
3406af4da5dSStephan Aßmus 	status_t status;
3416af4da5dSStephan Aßmus 	entry_ref ref;
3426af4da5dSStephan Aßmus 	entry_ref inRef;
3436af4da5dSStephan Aßmus 
3446af4da5dSStephan Aßmus 	BString string, string2;
3456af4da5dSStephan Aßmus 
346*1c992a52SStephan Aßmus     // TODO: For preview, launch the default file app instead of hardcoded
347*1c992a52SStephan Aßmus     // MediaPlayer
3487767db5aSPhilippe Houdoin 	BEntry entry("/boot/system/apps/MediaPlayer", true);
3496af4da5dSStephan Aßmus 	char buffer[40];
3506af4da5dSStephan Aßmus 	char buffer2[B_PATH_NAME_LENGTH];
351*1c992a52SStephan Aßmus 	const char* argv[3];
3526af4da5dSStephan Aßmus 	argv[0] = "-pos";
3536af4da5dSStephan Aßmus 	BMediaFile *inFile(NULL);
3546af4da5dSStephan Aßmus 	int32 srcIndex = 0;
3556af4da5dSStephan Aßmus 	BPath name;
3566af4da5dSStephan Aßmus 	BEntry inentry;
3576af4da5dSStephan Aßmus 	int32 value;
3586af4da5dSStephan Aßmus 	BRect ButtonRect;
3596af4da5dSStephan Aßmus 
3606af4da5dSStephan Aßmus 	switch (msg->what) {
3616af4da5dSStephan Aßmus 		#if B_BEOS_VERSION <= B_BEOS_VERSION_6
3626af4da5dSStephan Aßmus 		case B_LANGUAGE_CHANGED:
3636af4da5dSStephan Aßmus 			LanguageChanged();
3646af4da5dSStephan Aßmus 			break;
3656af4da5dSStephan Aßmus 		#endif
3666af4da5dSStephan Aßmus 
3676af4da5dSStephan Aßmus 		case INIT_FORMAT_MENUS:
3686af4da5dSStephan Aßmus 			BuildFormatMenu();
3696af4da5dSStephan Aßmus 			if (CountSourceFiles() == 0)
3706af4da5dSStephan Aßmus 				SetEnabled(false, false);
3716af4da5dSStephan Aßmus 			break;
3726af4da5dSStephan Aßmus 
3736af4da5dSStephan Aßmus 		case B_SIMPLE_DATA:
3746af4da5dSStephan Aßmus 			if (msg->WasDropped())
3756af4da5dSStephan Aßmus 			{
3766af4da5dSStephan Aßmus 				DetachCurrentMessage();
3776af4da5dSStephan Aßmus 				msg->what = B_REFS_RECEIVED;
3786af4da5dSStephan Aßmus 				BMessenger(be_app).SendMessage(msg);
3796af4da5dSStephan Aßmus 				delete msg;
3806af4da5dSStephan Aßmus 			}
3816af4da5dSStephan Aßmus 			break;
3826af4da5dSStephan Aßmus 
3836af4da5dSStephan Aßmus 		case FORMAT_SELECT_MESSAGE:
3846af4da5dSStephan Aßmus 			BuildAudioVideoMenus();
3856af4da5dSStephan Aßmus 			break;
3866af4da5dSStephan Aßmus 		case AUDIO_CODEC_SELECT_MESSAGE:
3876af4da5dSStephan Aßmus 			break;
3886af4da5dSStephan Aßmus 		case VIDEO_CODEC_SELECT_MESSAGE:
3896af4da5dSStephan Aßmus 			break;
3906af4da5dSStephan Aßmus 
3916af4da5dSStephan Aßmus 		case CONVERT_BUTTON_MESSAGE:
3926af4da5dSStephan Aßmus 			if (!fConverting) {
3936af4da5dSStephan Aßmus 				fConvertButton->SetLabel(CANCEL_LABEL);
3946af4da5dSStephan Aßmus 				fConverting = true;
3956af4da5dSStephan Aßmus 				SetStatusMessage(CONVERT_LABEL);
3966af4da5dSStephan Aßmus 				SetEnabled(false, true);
3976af4da5dSStephan Aßmus 				BMessenger(be_app).SendMessage(START_CONVERSION_MESSAGE);
3986af4da5dSStephan Aßmus 			} else if (!fCancelling) {
3996af4da5dSStephan Aßmus 				fCancelling = true;
4006af4da5dSStephan Aßmus 				SetStatusMessage(CANCELLING_LABEL B_UTF8_ELLIPSIS);
4016af4da5dSStephan Aßmus 				BMessenger(be_app).SendMessage(CANCEL_CONVERSION_MESSAGE);
4026af4da5dSStephan Aßmus 			}
4036af4da5dSStephan Aßmus 			break;
4046af4da5dSStephan Aßmus 
4056af4da5dSStephan Aßmus 		case CONVERSION_DONE_MESSAGE:
4066af4da5dSStephan Aßmus 			SetStatusMessage(fCancelling ? CONV_CANCEL_LABEL : CONV_COMPLETE_LABEL);
4076af4da5dSStephan Aßmus 			fConverting = false;
4086af4da5dSStephan Aßmus 			fCancelling = false;
4096af4da5dSStephan Aßmus 			{
4106af4da5dSStephan Aßmus 				bool enable = CountSourceFiles() > 0;
4116af4da5dSStephan Aßmus 				SetEnabled(enable, enable);
4126af4da5dSStephan Aßmus 			}
4136af4da5dSStephan Aßmus 			fConvertButton->SetLabel(CONVERT_LABEL);
4146af4da5dSStephan Aßmus 
4156af4da5dSStephan Aßmus 
4166af4da5dSStephan Aßmus 			break;
4176af4da5dSStephan Aßmus 
4186af4da5dSStephan Aßmus 		case OUTPUT_FOLDER_MESSAGE:
4196af4da5dSStephan Aßmus 		//	 Execute Save Panel
4206af4da5dSStephan Aßmus 			if (!fSaveFilePanel) {
4216af4da5dSStephan Aßmus 				BButton *SelectThisDir;
4226af4da5dSStephan Aßmus 
4233c0f9a7cSKarsten Heimrich 				BMessage message(FOLDER_SELECT_MESSAGE);
4243c0f9a7cSKarsten Heimrich 				fSaveFilePanel = new BFilePanel(B_OPEN_PANEL, NULL, NULL,
4253c0f9a7cSKarsten Heimrich 					B_DIRECTORY_NODE, true, &message, NULL, false, true);
4266af4da5dSStephan Aßmus 				fSaveFilePanel->SetButtonLabel(B_DEFAULT_BUTTON, SELECT_LABEL);
4276af4da5dSStephan Aßmus 				fSaveFilePanel->Window()->SetTitle(SAVE_DIR_LABEL);
4286af4da5dSStephan Aßmus 				fSaveFilePanel->SetTarget(this);
4296af4da5dSStephan Aßmus 
4306af4da5dSStephan Aßmus 				fSaveFilePanel->Window()->Lock();
4316af4da5dSStephan Aßmus 				ButtonRect = fSaveFilePanel->Window()->ChildAt(0)->FindView("cancel button")->Frame();
4326af4da5dSStephan Aßmus 				ButtonRect.right  = ButtonRect.left - 20;
4336af4da5dSStephan Aßmus 				ButtonRect.left = ButtonRect.right - 130;
4346af4da5dSStephan Aßmus 				SelectThisDir = new BButton(ButtonRect, NULL, SELECT_DIR_LABEL,
4356af4da5dSStephan Aßmus 					new BMessage(SELECT_THIS_DIR_MESSAGE), B_FOLLOW_BOTTOM | B_FOLLOW_RIGHT);
4366af4da5dSStephan Aßmus 				SelectThisDir->SetTarget(this);
4376af4da5dSStephan Aßmus 				fSaveFilePanel->Window()->ChildAt(0)->AddChild(SelectThisDir);
4386af4da5dSStephan Aßmus 				fSaveFilePanel->Window()->Unlock();
4396af4da5dSStephan Aßmus 
4406af4da5dSStephan Aßmus 				BRefFilter *filter;
4416af4da5dSStephan Aßmus 				filter = new DirectoryFilter;
4426af4da5dSStephan Aßmus 				fSaveFilePanel->SetRefFilter(filter);
4436af4da5dSStephan Aßmus 			}
4446af4da5dSStephan Aßmus 			fSaveFilePanel->Show();
4456af4da5dSStephan Aßmus 			break;
4466af4da5dSStephan Aßmus 
4476af4da5dSStephan Aßmus 		case FOLDER_SELECT_MESSAGE:
4486af4da5dSStephan Aßmus 		//	 "SELECT" Button at Save Panel Pushed
4496af4da5dSStephan Aßmus 			fSaveFilePanel->GetNextSelectedRef(&inRef);
4506af4da5dSStephan Aßmus 			inentry.SetTo(&inRef, true);
4516af4da5dSStephan Aßmus 			_SetOutputFolder(inentry);
4526af4da5dSStephan Aßmus 			fOutputDirSpecified = true;
4536af4da5dSStephan Aßmus 			break;
4546af4da5dSStephan Aßmus 
4556af4da5dSStephan Aßmus 		case SELECT_THIS_DIR_MESSAGE:
4566af4da5dSStephan Aßmus 		//	 "THIS DIR" Button at Save Panel Pushed
4576af4da5dSStephan Aßmus 			fSaveFilePanel->GetPanelDirectory(&inRef);
4586af4da5dSStephan Aßmus 			fSaveFilePanel->Hide();
4596af4da5dSStephan Aßmus 			inentry.SetTo(&inRef, true);
4606af4da5dSStephan Aßmus 			_SetOutputFolder(inentry);
4616af4da5dSStephan Aßmus 			fOutputDirSpecified = true;
4626af4da5dSStephan Aßmus 			break;
4636af4da5dSStephan Aßmus 
4646af4da5dSStephan Aßmus 		case OPEN_FILE_MESSAGE:
4656af4da5dSStephan Aßmus 		//	 Execute Open Panel
4666af4da5dSStephan Aßmus 			if (!fOpenFilePanel) {
4673c0f9a7cSKarsten Heimrich 				fOpenFilePanel = new BFilePanel(B_OPEN_PANEL, NULL, NULL,
4683c0f9a7cSKarsten Heimrich 					B_FILE_NODE, true, NULL, NULL, false, true);
4696af4da5dSStephan Aßmus 				fOpenFilePanel->SetTarget(this);
4706af4da5dSStephan Aßmus 			}
4716af4da5dSStephan Aßmus 			fOpenFilePanel->Show();
4726af4da5dSStephan Aßmus 			break;
4736af4da5dSStephan Aßmus 
4746af4da5dSStephan Aßmus 		case B_REFS_RECEIVED:
4756af4da5dSStephan Aßmus 		//	Media Files Seleced by Open Panel
4766af4da5dSStephan Aßmus 			DetachCurrentMessage();
4776af4da5dSStephan Aßmus 			msg->what = B_REFS_RECEIVED;
4786af4da5dSStephan Aßmus 			BMessenger(be_app).SendMessage(msg);
4796af4da5dSStephan Aßmus 			// fall through
4806af4da5dSStephan Aßmus 
4816af4da5dSStephan Aßmus 		case B_CANCEL:
4826af4da5dSStephan Aßmus 			break;
4836af4da5dSStephan Aßmus 
4846af4da5dSStephan Aßmus 		case DISP_ABOUT_MESSAGE: {
4856af4da5dSStephan Aßmus 			(new BAlert(ABOUT_TITLE_LABEL B_UTF8_ELLIPSIS,
4866af4da5dSStephan Aßmus 					"MediaConverter\n"
4876af4da5dSStephan Aßmus 					VERSION"\n"
4886af4da5dSStephan Aßmus 					B_UTF8_COPYRIGHT" 1999, Be Incorporated.\n"
4896af4da5dSStephan Aßmus 					B_UTF8_COPYRIGHT" 2000-2004 Jun Suzuki\n"
4906af4da5dSStephan Aßmus 					B_UTF8_COPYRIGHT" 2007 Stephan Aßmus",
4916af4da5dSStephan Aßmus 					OK_LABEL))->Go();
4926af4da5dSStephan Aßmus 			break;
4936af4da5dSStephan Aßmus 		}
4946af4da5dSStephan Aßmus 
4956af4da5dSStephan Aßmus 		case QUIT_MESSAGE:
4966af4da5dSStephan Aßmus 			MediaConverterWindow::QuitRequested();
4976af4da5dSStephan Aßmus 			break;
4986af4da5dSStephan Aßmus 
4996af4da5dSStephan Aßmus 		case PREVIEW_MESSAGE:
5006af4da5dSStephan Aßmus 			entry.GetRef(&ref);
5016af4da5dSStephan Aßmus 			string = "";
5026af4da5dSStephan Aßmus 			string << fStartDurationTC->Text();
5036af4da5dSStephan Aßmus 			string << "000";
5046af4da5dSStephan Aßmus 
5056af4da5dSStephan Aßmus 			strcpy(buffer, string.String());
5066af4da5dSStephan Aßmus 			argv[1] = buffer;
5076af4da5dSStephan Aßmus 			srcIndex = fListView->CurrentSelection();
5086af4da5dSStephan Aßmus 			status = GetSourceFileAt(srcIndex, &inFile, &inRef);
5096af4da5dSStephan Aßmus 			if (status == B_OK) {
5106af4da5dSStephan Aßmus 				inentry.SetTo(&inRef);
5116af4da5dSStephan Aßmus 				inentry.GetPath(&name);
5126af4da5dSStephan Aßmus 
5136af4da5dSStephan Aßmus 				strcpy(buffer, string.String());
5146af4da5dSStephan Aßmus 
5156af4da5dSStephan Aßmus 				strcpy(buffer2, name.Path());
5166af4da5dSStephan Aßmus 				argv[2] = buffer2;
5176af4da5dSStephan Aßmus 			}
5186af4da5dSStephan Aßmus 
5196af4da5dSStephan Aßmus 			status = be_roster->Launch(&ref, 3, argv);
5206af4da5dSStephan Aßmus 
5216af4da5dSStephan Aßmus 			if (status != B_OK) {
5226af4da5dSStephan Aßmus 				string2 << LAUNCH_ERROR << strerror(status);
5236af4da5dSStephan Aßmus 				(new BAlert("", string2.String(), OK_LABEL))->Go();
5246af4da5dSStephan Aßmus 			}
5256af4da5dSStephan Aßmus 			break;
5266af4da5dSStephan Aßmus 
5276af4da5dSStephan Aßmus 		case VIDEO_QUALITY_CHANGED_MESSAGE:
5286af4da5dSStephan Aßmus 			msg->FindInt32("be:value",&value);
5296af4da5dSStephan Aßmus 			sprintf(buffer, VIDEO_QUALITY_LABEL, (int8)value);
5306af4da5dSStephan Aßmus 			fVideoQualitySlider->SetLabel(buffer);
5316af4da5dSStephan Aßmus 			fVideoQuality = value;
5326af4da5dSStephan Aßmus 			break;
5336af4da5dSStephan Aßmus 
5346af4da5dSStephan Aßmus 		case AUDIO_QUALITY_CHANGED_MESSAGE:
5356af4da5dSStephan Aßmus 			msg->FindInt32("be:value",&value);
5366af4da5dSStephan Aßmus 			sprintf(buffer, AUDIO_QUALITY_LABEL, (int8)value);
5376af4da5dSStephan Aßmus 			fAudioQualitySlider->SetLabel(buffer);
5386af4da5dSStephan Aßmus 			fAudioQuality = value;
5396af4da5dSStephan Aßmus 			break;
5406af4da5dSStephan Aßmus 
5416af4da5dSStephan Aßmus 		default:
5426af4da5dSStephan Aßmus 			BWindow::MessageReceived(msg);
5436af4da5dSStephan Aßmus 	}
5446af4da5dSStephan Aßmus }
5456af4da5dSStephan Aßmus 
5466af4da5dSStephan Aßmus 
5476af4da5dSStephan Aßmus bool
5486af4da5dSStephan Aßmus MediaConverterWindow::QuitRequested()
5496af4da5dSStephan Aßmus {
5506af4da5dSStephan Aßmus 	if (!fConverting) {
5516af4da5dSStephan Aßmus 		BMessenger(be_app).SendMessage(B_QUIT_REQUESTED);
5526af4da5dSStephan Aßmus 		return true;
5536af4da5dSStephan Aßmus 	} else if (!fCancelling) {
5546af4da5dSStephan Aßmus 		fCancelling = true;
5556af4da5dSStephan Aßmus 		SetStatusMessage(CANCELLING_LABEL);
5566af4da5dSStephan Aßmus 		BMessenger(be_app).SendMessage(CANCEL_CONVERSION_MESSAGE);
5576af4da5dSStephan Aßmus 	}
5586af4da5dSStephan Aßmus 	return false;
5596af4da5dSStephan Aßmus }
5606af4da5dSStephan Aßmus 
5616af4da5dSStephan Aßmus 
5626af4da5dSStephan Aßmus // #pragma mark -
5636af4da5dSStephan Aßmus 
5646af4da5dSStephan Aßmus 
5656af4da5dSStephan Aßmus void
5666af4da5dSStephan Aßmus MediaConverterWindow::LanguageChanged()
5676af4da5dSStephan Aßmus {
5686af4da5dSStephan Aßmus 	_DestroyMenu();
5696af4da5dSStephan Aßmus 	_CreateMenu();
5706af4da5dSStephan Aßmus 	_UpdateLabels();
5716af4da5dSStephan Aßmus 	BuildAudioVideoMenus();
5726af4da5dSStephan Aßmus 	Lock();
5736af4da5dSStephan Aßmus 	fInfoView->Invalidate();
5746af4da5dSStephan Aßmus 	Unlock();
5756af4da5dSStephan Aßmus }
5766af4da5dSStephan Aßmus 
5776af4da5dSStephan Aßmus 
5786af4da5dSStephan Aßmus void
5796af4da5dSStephan Aßmus MediaConverterWindow::BuildAudioVideoMenus()
5806af4da5dSStephan Aßmus {
5816af4da5dSStephan Aßmus 	BMenu *menu = fAudioMenu->Menu();
5826af4da5dSStephan Aßmus 	BMenuItem *item;
5836af4da5dSStephan Aßmus 	// clear out old audio codec menu items
5846af4da5dSStephan Aßmus 	while ((item = menu->RemoveItem((int32)0)) != NULL) {
5856af4da5dSStephan Aßmus 		delete item;
5866af4da5dSStephan Aßmus 	}
5876af4da5dSStephan Aßmus 
5886af4da5dSStephan Aßmus 	bool separator = true;
5896af4da5dSStephan Aßmus 
5906af4da5dSStephan Aßmus 	// get selected file format
5916af4da5dSStephan Aßmus 	FileFormatMenuItem *ffmi = (FileFormatMenuItem*)fFormatMenu->Menu()->FindMarked();
5926af4da5dSStephan Aßmus 	media_file_format *mf_format = &(ffmi->fFileFormat);
5936af4da5dSStephan Aßmus 
5946af4da5dSStephan Aßmus 	media_format format, outfmt;
5956af4da5dSStephan Aßmus 	memset(&format, 0, sizeof(format));
5966af4da5dSStephan Aßmus 	media_codec_info codec_info;
5976af4da5dSStephan Aßmus 	int32 cookie = 0;
5986af4da5dSStephan Aßmus 	CodecMenuItem* cmi;
5996af4da5dSStephan Aßmus 
6006af4da5dSStephan Aßmus 	// add available audio encoders to menu
6016af4da5dSStephan Aßmus 	format.type = B_MEDIA_RAW_AUDIO;
6026af4da5dSStephan Aßmus 	format.u.raw_audio = media_raw_audio_format::wildcard;
6036af4da5dSStephan Aßmus 	while (get_next_encoder(&cookie, mf_format, &format, &outfmt, &codec_info) == B_OK) {
6046af4da5dSStephan Aßmus 		if (separator) {
6056af4da5dSStephan Aßmus 			menu->AddItem(new BMenuItem("No Audio",
6066af4da5dSStephan Aßmus 				new BMessage(AUDIO_CODEC_SELECT_MESSAGE)));
6076af4da5dSStephan Aßmus 			menu->AddSeparatorItem();
6086af4da5dSStephan Aßmus 			separator = false;
6096af4da5dSStephan Aßmus 		}
6106af4da5dSStephan Aßmus 
6116af4da5dSStephan Aßmus 		cmi = new CodecMenuItem(&codec_info, AUDIO_CODEC_SELECT_MESSAGE);
6126af4da5dSStephan Aßmus 		menu->AddItem(cmi);
6136af4da5dSStephan Aßmus 		// reset media format struct
6146af4da5dSStephan Aßmus /*
6156af4da5dSStephan Aßmus 		format.type = B_MEDIA_RAW_AUDIO;
6166af4da5dSStephan Aßmus 		format.u.raw_audio = media_raw_audio_format::wildcard;
6176af4da5dSStephan Aßmus */
6186af4da5dSStephan Aßmus 	}
6196af4da5dSStephan Aßmus 
6206af4da5dSStephan Aßmus 	// mark first audio encoder
6216af4da5dSStephan Aßmus 	item = menu->ItemAt(0);
6226af4da5dSStephan Aßmus 	if (item != NULL) {
6236af4da5dSStephan Aßmus 		fAudioMenu->SetEnabled(fEnabled);
6246af4da5dSStephan Aßmus 		fAudioQualitySlider->SetEnabled(fEnabled);
6256af4da5dSStephan Aßmus 		item->SetMarked(true);
6266af4da5dSStephan Aßmus 		((BInvoker *)item)->Invoke();
6276af4da5dSStephan Aßmus 	} else {
6286af4da5dSStephan Aßmus 		item = new BMenuItem(NONE_LABEL, NULL);
6296af4da5dSStephan Aßmus 		menu->AddItem(item);
6306af4da5dSStephan Aßmus 		item->SetMarked(true);
6316af4da5dSStephan Aßmus 		fAudioMenu->SetEnabled(false);
6326af4da5dSStephan Aßmus 		fAudioQualitySlider->SetEnabled(false);
6336af4da5dSStephan Aßmus 	}
6346af4da5dSStephan Aßmus 
6356af4da5dSStephan Aßmus 	// clear out old video codec menu items
6366af4da5dSStephan Aßmus 	menu = fVideoMenu->Menu();
6376af4da5dSStephan Aßmus 	while ((item = menu->RemoveItem((int32)0)) != NULL) {
6386af4da5dSStephan Aßmus 		delete item;
6396af4da5dSStephan Aßmus 	}
6406af4da5dSStephan Aßmus 
6416af4da5dSStephan Aßmus 	separator = true;
6426af4da5dSStephan Aßmus 
6436af4da5dSStephan Aßmus 	// construct a generic video format.  Some of these parameters
6446af4da5dSStephan Aßmus 	// seem silly, but are needed for R4.5.x, which is more picky
6456af4da5dSStephan Aßmus 	// than subsequent BeOS releases will be.
6466af4da5dSStephan Aßmus 	memset(&format, 0, sizeof(format));
6476af4da5dSStephan Aßmus 	format.type = B_MEDIA_RAW_VIDEO;
6486af4da5dSStephan Aßmus 	format.u.raw_video.last_active = (uint32)(240 - 1);
6496af4da5dSStephan Aßmus 	format.u.raw_video.orientation = B_VIDEO_TOP_LEFT_RIGHT;
6506af4da5dSStephan Aßmus 	format.u.raw_video.display.format = B_RGB32;
6516af4da5dSStephan Aßmus 	format.u.raw_video.display.line_width = (int32)320;
6526af4da5dSStephan Aßmus 	format.u.raw_video.display.line_count = (int32)240;
6536af4da5dSStephan Aßmus 	format.u.raw_video.display.bytes_per_row = 4 * 320;
6546af4da5dSStephan Aßmus 
6556af4da5dSStephan Aßmus 	// add available video encoders to menu
6566af4da5dSStephan Aßmus 	cookie = 0;
6576af4da5dSStephan Aßmus 	while (get_next_encoder(&cookie, mf_format, &format, &outfmt, &codec_info) == B_OK) {
6586af4da5dSStephan Aßmus 		if (separator) {
6596af4da5dSStephan Aßmus 			menu->AddItem(new BMenuItem("No Video",
6606af4da5dSStephan Aßmus 				new BMessage(VIDEO_CODEC_SELECT_MESSAGE)));
6616af4da5dSStephan Aßmus 			menu->AddSeparatorItem();
6626af4da5dSStephan Aßmus 			separator = false;
6636af4da5dSStephan Aßmus 		}
6646af4da5dSStephan Aßmus 
6656af4da5dSStephan Aßmus 		cmi = new CodecMenuItem(&codec_info, VIDEO_CODEC_SELECT_MESSAGE);
6666af4da5dSStephan Aßmus 		menu->AddItem(cmi);
6676af4da5dSStephan Aßmus 	}
6686af4da5dSStephan Aßmus 
6696af4da5dSStephan Aßmus 	// mark first video encoder
6706af4da5dSStephan Aßmus 	item = menu->ItemAt(0);
6716af4da5dSStephan Aßmus 	if (item != NULL) {
6726af4da5dSStephan Aßmus 		fVideoMenu->SetEnabled(fEnabled);
6736af4da5dSStephan Aßmus 		fVideoQualitySlider->SetEnabled(fEnabled);
6746af4da5dSStephan Aßmus 		item->SetMarked(true);
6756af4da5dSStephan Aßmus 		((BInvoker *)item)->Invoke();
6766af4da5dSStephan Aßmus 	} else {
6776af4da5dSStephan Aßmus 		item = new BMenuItem(NONE_LABEL, NULL);
6786af4da5dSStephan Aßmus 		menu->AddItem(item);
6796af4da5dSStephan Aßmus 		item->SetMarked(true);
6806af4da5dSStephan Aßmus 		fVideoMenu->SetEnabled(false);
6816af4da5dSStephan Aßmus 		fVideoQualitySlider->SetEnabled(false);
6826af4da5dSStephan Aßmus 	}
6836af4da5dSStephan Aßmus }
6846af4da5dSStephan Aßmus 
6856af4da5dSStephan Aßmus void
6866af4da5dSStephan Aßmus MediaConverterWindow::GetSelectedFormatInfo(media_file_format** format,
6876af4da5dSStephan Aßmus 	media_codec_info** audio, media_codec_info** video)
6886af4da5dSStephan Aßmus {
6896af4da5dSStephan Aßmus 	*audio = NULL;
6906af4da5dSStephan Aßmus 	*video = NULL;
6916af4da5dSStephan Aßmus 	*format = NULL;
6926af4da5dSStephan Aßmus 
6936af4da5dSStephan Aßmus 	FileFormatMenuItem *formatItem =
6946af4da5dSStephan Aßmus 		dynamic_cast<FileFormatMenuItem *>(fFormatMenu->Menu()->FindMarked());
6956af4da5dSStephan Aßmus 	if (formatItem != NULL) {
6966af4da5dSStephan Aßmus 		*format = &(formatItem->fFileFormat);
6976af4da5dSStephan Aßmus 	}
6986af4da5dSStephan Aßmus 
6996af4da5dSStephan Aßmus 	*audio = *video = NULL;
7006af4da5dSStephan Aßmus 	CodecMenuItem *codecItem =
7016af4da5dSStephan Aßmus 		dynamic_cast<CodecMenuItem *>(fAudioMenu->Menu()->FindMarked());
7026af4da5dSStephan Aßmus 	if (codecItem != NULL) {
7036af4da5dSStephan Aßmus 		*audio =  &(codecItem->fCodecInfo);
7046af4da5dSStephan Aßmus 	}
7056af4da5dSStephan Aßmus 
7066af4da5dSStephan Aßmus 	codecItem = dynamic_cast<CodecMenuItem *>(fVideoMenu->Menu()->FindMarked());
7076af4da5dSStephan Aßmus 	if (codecItem != NULL) {
7086af4da5dSStephan Aßmus 		*video =  &(codecItem->fCodecInfo);
7096af4da5dSStephan Aßmus 	}
7106af4da5dSStephan Aßmus }
7116af4da5dSStephan Aßmus 
7126af4da5dSStephan Aßmus 
7136af4da5dSStephan Aßmus void
7146af4da5dSStephan Aßmus MediaConverterWindow::BuildFormatMenu()
7156af4da5dSStephan Aßmus {
7166af4da5dSStephan Aßmus 	BMenu *menu = fFormatMenu->Menu();
7176af4da5dSStephan Aßmus 	BMenuItem *item;
7186af4da5dSStephan Aßmus 	// clear out old format menu items
7196af4da5dSStephan Aßmus 	while ((item = menu->RemoveItem((int32)0)) != NULL) {
7206af4da5dSStephan Aßmus 		delete item;
7216af4da5dSStephan Aßmus 	}
7226af4da5dSStephan Aßmus 
7236af4da5dSStephan Aßmus 	// add menu items for each file format
7246af4da5dSStephan Aßmus 	media_file_format mfi;
7256af4da5dSStephan Aßmus 	int32 cookie = 0;
7266af4da5dSStephan Aßmus 	FileFormatMenuItem *ff_item;
7276af4da5dSStephan Aßmus 	while (get_next_file_format(&cookie, &mfi) == B_OK) {
7286af4da5dSStephan Aßmus 		ff_item = new FileFormatMenuItem(&mfi);
7296af4da5dSStephan Aßmus 		menu->AddItem(ff_item);
7306af4da5dSStephan Aßmus 	}
7316af4da5dSStephan Aßmus 
7326af4da5dSStephan Aßmus 	// mark first item
7336af4da5dSStephan Aßmus 	item = menu->ItemAt(0);
7346af4da5dSStephan Aßmus 	if (item != NULL) {
7356af4da5dSStephan Aßmus 		item->SetMarked(true);
7366af4da5dSStephan Aßmus 		((BInvoker *)item)->Invoke();
7376af4da5dSStephan Aßmus 	}
7386af4da5dSStephan Aßmus }
7396af4da5dSStephan Aßmus 
7406af4da5dSStephan Aßmus void
7416af4da5dSStephan Aßmus MediaConverterWindow::SetFileMessage(const char *message)
7426af4da5dSStephan Aßmus {
7436af4da5dSStephan Aßmus 	fStatusView->SetStatus(message);
7446af4da5dSStephan Aßmus }
7456af4da5dSStephan Aßmus 
7466af4da5dSStephan Aßmus void
7476af4da5dSStephan Aßmus MediaConverterWindow::SetStatusMessage(const char *message)
7486af4da5dSStephan Aßmus {
7496af4da5dSStephan Aßmus 	fStatusView2->SetStatus(message);
7506af4da5dSStephan Aßmus }
7516af4da5dSStephan Aßmus 
7526af4da5dSStephan Aßmus 
7536af4da5dSStephan Aßmus // #pragma mark -
7546af4da5dSStephan Aßmus 
7556af4da5dSStephan Aßmus 
756*1c992a52SStephan Aßmus bool
7576af4da5dSStephan Aßmus MediaConverterWindow::AddSourceFile(BMediaFile* file, const entry_ref& ref)
7586af4da5dSStephan Aßmus {
759*1c992a52SStephan Aßmus 	if (!fListView->AddMediaItem(file, ref))
760*1c992a52SStephan Aßmus 		return false;
7616af4da5dSStephan Aßmus 
7626af4da5dSStephan Aßmus 	if (!fOutputDirSpecified) {
7636af4da5dSStephan Aßmus 		BEntry entry(&ref);
7646af4da5dSStephan Aßmus 		entry.GetParent(&entry);
7656af4da5dSStephan Aßmus 		_SetOutputFolder(entry);
7666af4da5dSStephan Aßmus 	}
767*1c992a52SStephan Aßmus 
768*1c992a52SStephan Aßmus 	return true;
7696af4da5dSStephan Aßmus }
7706af4da5dSStephan Aßmus 
7716af4da5dSStephan Aßmus 
7726af4da5dSStephan Aßmus void
7736af4da5dSStephan Aßmus MediaConverterWindow::RemoveSourceFile(int32 index)
7746af4da5dSStephan Aßmus {
7756af4da5dSStephan Aßmus 	delete fListView->RemoveItem(index);
7766af4da5dSStephan Aßmus 	fStartDurationTC->SetText("0");
7776af4da5dSStephan Aßmus 	fEndDurationTC->SetText("0");
7786af4da5dSStephan Aßmus }
7796af4da5dSStephan Aßmus 
7806af4da5dSStephan Aßmus 
7816af4da5dSStephan Aßmus int32
7826af4da5dSStephan Aßmus MediaConverterWindow::CountSourceFiles()
7836af4da5dSStephan Aßmus {
7846af4da5dSStephan Aßmus 	return fListView->CountItems();
7856af4da5dSStephan Aßmus }
7866af4da5dSStephan Aßmus 
7876af4da5dSStephan Aßmus 
7886af4da5dSStephan Aßmus status_t
7896af4da5dSStephan Aßmus MediaConverterWindow::GetSourceFileAt(int32 index, BMediaFile** _file,
7906af4da5dSStephan Aßmus 	entry_ref* ref)
7916af4da5dSStephan Aßmus {
7926af4da5dSStephan Aßmus 	MediaFileListItem* item = dynamic_cast<MediaFileListItem*>(
7936af4da5dSStephan Aßmus 		fListView->ItemAt(index));
7946af4da5dSStephan Aßmus 	if (item != NULL) {
7956af4da5dSStephan Aßmus 		*_file = item->fMediaFile;
7966af4da5dSStephan Aßmus 		*ref = item->fRef;
7976af4da5dSStephan Aßmus 		return B_OK;
7986af4da5dSStephan Aßmus 	} else {
7996af4da5dSStephan Aßmus 		return B_ERROR;
8006af4da5dSStephan Aßmus 	}
8016af4da5dSStephan Aßmus }
8026af4da5dSStephan Aßmus 
8036af4da5dSStephan Aßmus 
8046af4da5dSStephan Aßmus void
8056af4da5dSStephan Aßmus MediaConverterWindow::SourceFileSelectionChanged()
8066af4da5dSStephan Aßmus {
8076af4da5dSStephan Aßmus 	int32 selected = fListView->CurrentSelection();
8086af4da5dSStephan Aßmus 	BMediaFile* file = NULL;
8096af4da5dSStephan Aßmus 	entry_ref* _ref = NULL;
8106af4da5dSStephan Aßmus 	entry_ref ref;
8116af4da5dSStephan Aßmus 	bool enabled = false;
8126af4da5dSStephan Aßmus 	if (GetSourceFileAt(selected, &file, &ref) == B_OK) {
8136af4da5dSStephan Aßmus 		_ref = &ref;
8146af4da5dSStephan Aßmus 		enabled = true;
8156af4da5dSStephan Aßmus 	}
8166af4da5dSStephan Aßmus 
8176af4da5dSStephan Aßmus 	fPreviewButton->SetEnabled(enabled);
8186af4da5dSStephan Aßmus 	fVideoQualitySlider->SetEnabled(enabled);
8196af4da5dSStephan Aßmus 	fAudioQualitySlider->SetEnabled(enabled);
8206af4da5dSStephan Aßmus 	fStartDurationTC->SetEnabled(enabled);
8216af4da5dSStephan Aßmus 	fEndDurationTC->SetEnabled(enabled);
8226af4da5dSStephan Aßmus 
8236af4da5dSStephan Aßmus 	fInfoView->Update(file, _ref);
8246af4da5dSStephan Aßmus 
8256af4da5dSStephan Aßmus 	// HACK: get the fInfoView to update the duration "synchronously"
8266af4da5dSStephan Aßmus 	UpdateIfNeeded();
8276af4da5dSStephan Aßmus 
8286af4da5dSStephan Aßmus 	// update duration text controls
8296af4da5dSStephan Aßmus 	fStartDurationTC->SetText("0");
8306af4da5dSStephan Aßmus 	BString duration;
8316af4da5dSStephan Aßmus 	duration << fInfoView->Duration() / 1000;
8326af4da5dSStephan Aßmus 	fEndDurationTC->SetText(duration.String());
8336af4da5dSStephan Aßmus }
8346af4da5dSStephan Aßmus 
8356af4da5dSStephan Aßmus 
8366af4da5dSStephan Aßmus // #pragma mark -
8376af4da5dSStephan Aßmus 
8386af4da5dSStephan Aßmus 
8396af4da5dSStephan Aßmus void
8406af4da5dSStephan Aßmus MediaConverterWindow::SetEnabled(bool enabled, bool convertEnabled)
8416af4da5dSStephan Aßmus {
8426af4da5dSStephan Aßmus 	fConvertButton->SetEnabled(convertEnabled);
8436af4da5dSStephan Aßmus 	if (enabled == fEnabled)
8446af4da5dSStephan Aßmus 			return;
8456af4da5dSStephan Aßmus 
8466af4da5dSStephan Aßmus 	fFormatMenu->SetEnabled(enabled);
8476af4da5dSStephan Aßmus 	fAudioMenu->SetEnabled(enabled);
8486af4da5dSStephan Aßmus 	fVideoMenu->SetEnabled(enabled);
8496af4da5dSStephan Aßmus 	fListView->SetEnabled(enabled);
8506af4da5dSStephan Aßmus 	fStartDurationTC->SetEnabled(enabled);
8516af4da5dSStephan Aßmus 	fEndDurationTC->SetEnabled(enabled);
8526af4da5dSStephan Aßmus 
8536af4da5dSStephan Aßmus 	fEnabled = enabled;
8546af4da5dSStephan Aßmus }
8556af4da5dSStephan Aßmus 
8566af4da5dSStephan Aßmus 
8576af4da5dSStephan Aßmus bool
8586af4da5dSStephan Aßmus MediaConverterWindow::IsEnabled()
8596af4da5dSStephan Aßmus {
8606af4da5dSStephan Aßmus 	return fEnabled;
8616af4da5dSStephan Aßmus }
8626af4da5dSStephan Aßmus 
8636af4da5dSStephan Aßmus 
8646af4da5dSStephan Aßmus const char*
8656af4da5dSStephan Aßmus MediaConverterWindow::StartDuration() const
8666af4da5dSStephan Aßmus {
8676af4da5dSStephan Aßmus 	return fStartDurationTC->Text();
8686af4da5dSStephan Aßmus }
8696af4da5dSStephan Aßmus 
8706af4da5dSStephan Aßmus 
8716af4da5dSStephan Aßmus const char*
8726af4da5dSStephan Aßmus MediaConverterWindow::EndDuration() const
8736af4da5dSStephan Aßmus {
8746af4da5dSStephan Aßmus 	return fEndDurationTC->Text();
8756af4da5dSStephan Aßmus }
8766af4da5dSStephan Aßmus 
8776af4da5dSStephan Aßmus 
8786af4da5dSStephan Aßmus BDirectory
8796af4da5dSStephan Aßmus MediaConverterWindow::OutputDirectory() const
8806af4da5dSStephan Aßmus {
8816af4da5dSStephan Aßmus 	return fOutputDir;
8826af4da5dSStephan Aßmus }
8836af4da5dSStephan Aßmus 
8846af4da5dSStephan Aßmus 
8856af4da5dSStephan Aßmus void
8866af4da5dSStephan Aßmus MediaConverterWindow::SetAudioQualityLabel(const char* label)
8876af4da5dSStephan Aßmus {
8886af4da5dSStephan Aßmus 	fAudioQualitySlider->SetLabel(label);
8896af4da5dSStephan Aßmus }
8906af4da5dSStephan Aßmus 
8916af4da5dSStephan Aßmus 
8926af4da5dSStephan Aßmus void
8936af4da5dSStephan Aßmus MediaConverterWindow::SetVideoQualityLabel(const char* label)
8946af4da5dSStephan Aßmus {
8956af4da5dSStephan Aßmus 	fVideoQualitySlider->SetLabel(label);
8966af4da5dSStephan Aßmus }
8976af4da5dSStephan Aßmus 
8986af4da5dSStephan Aßmus 
8996af4da5dSStephan Aßmus // #pragma mark -
9006af4da5dSStephan Aßmus 
9016af4da5dSStephan Aßmus 
9026af4da5dSStephan Aßmus void
9036af4da5dSStephan Aßmus MediaConverterWindow::_UpdateLabels()
9046af4da5dSStephan Aßmus {
9056af4da5dSStephan Aßmus 	char buffer[255];
9066af4da5dSStephan Aßmus 
9076af4da5dSStephan Aßmus 	if (fBox1 != NULL)
9086af4da5dSStephan Aßmus 		fBox1->SetLabel(SOURCE_BOX_LABEL);
9096af4da5dSStephan Aßmus 	if (fBox2 != NULL)
9106af4da5dSStephan Aßmus 		fBox2->SetLabel(INFO_BOX_LABEL);
9116af4da5dSStephan Aßmus 	if (fBox3 != NULL)
9126af4da5dSStephan Aßmus 		fBox3->SetLabel(OUTPUT_BOX_LABEL);
9136af4da5dSStephan Aßmus 
9146af4da5dSStephan Aßmus 	BRect r(Bounds());
9156af4da5dSStephan Aßmus 	float w = 0;
9166af4da5dSStephan Aßmus 
9176af4da5dSStephan Aßmus 	if (fConvertButton != NULL) {
9186af4da5dSStephan Aßmus 		fConvertButton->SetLabel(CONVERT_LABEL);
9196af4da5dSStephan Aßmus 		fConvertButton->ResizeToPreferred();
9206af4da5dSStephan Aßmus 		BRect buttonFrame(fConvertButton->Frame());
9216af4da5dSStephan Aßmus 		w = buttonFrame.Width();
9226af4da5dSStephan Aßmus 		buttonFrame.OffsetTo(r.right - w - 10, r.bottom - buttonFrame.Height() - 25);
9236af4da5dSStephan Aßmus 		fConvertButton->MoveTo(buttonFrame.LeftTop());
9246af4da5dSStephan Aßmus 	}
9256af4da5dSStephan Aßmus 
9266af4da5dSStephan Aßmus 	if (fPreviewButton != NULL) {
9276af4da5dSStephan Aßmus 		fPreviewButton->SetLabel(PREVIEW_BUTTON_LABEL);
9286af4da5dSStephan Aßmus 		fPreviewButton->ResizeToPreferred();
9296af4da5dSStephan Aßmus 		BRect buttonFrame(fPreviewButton->Frame());
9306af4da5dSStephan Aßmus 		w = buttonFrame.Width();
9316af4da5dSStephan Aßmus 		buttonFrame.OffsetTo(r.right - w - buttonFrame.Width() - 40,
9326af4da5dSStephan Aßmus 						 r.bottom - buttonFrame.Height() - 25);
9336af4da5dSStephan Aßmus 		fPreviewButton->MoveTo(buttonFrame.LeftTop());
9346af4da5dSStephan Aßmus 	}
9356af4da5dSStephan Aßmus 
9366af4da5dSStephan Aßmus 	if (fDestButton != NULL) {
9376af4da5dSStephan Aßmus 		fDestButton->SetLabel(OUTPUT_FOLDER_LABEL);
9386af4da5dSStephan Aßmus 		fDestButton->ResizeToPreferred();
9396af4da5dSStephan Aßmus 	}
9406af4da5dSStephan Aßmus 
9416af4da5dSStephan Aßmus 	if (fOutputFolder != NULL) {
9426af4da5dSStephan Aßmus 		BRect destrect;
9436af4da5dSStephan Aßmus 		destrect = fDestButton->Frame();
9446af4da5dSStephan Aßmus 		fOutputFolder->MoveTo(destrect.right + 10, destrect.top + 5);
9456af4da5dSStephan Aßmus 		fOutputFolder->ResizeToPreferred();
9466af4da5dSStephan Aßmus 	}
9476af4da5dSStephan Aßmus 
9486af4da5dSStephan Aßmus 	sprintf(buffer, VIDEO_QUALITY_LABEL, (int8)fVideoQuality);
9496af4da5dSStephan Aßmus 	if (fVideoQualitySlider != NULL) {
9506af4da5dSStephan Aßmus 		fVideoQualitySlider->SetLabel(buffer);
9516af4da5dSStephan Aßmus 		fVideoQualitySlider->SetLimitLabels(SLIDER_LOW_LABEL,
9526af4da5dSStephan Aßmus 			SLIDER_HIGH_LABEL);
9536af4da5dSStephan Aßmus 	}
9546af4da5dSStephan Aßmus 
9556af4da5dSStephan Aßmus 	sprintf(buffer, AUDIO_QUALITY_LABEL, (int8)fAudioQuality);
9566af4da5dSStephan Aßmus 
9576af4da5dSStephan Aßmus 	if (fAudioQualitySlider != NULL) {
9586af4da5dSStephan Aßmus 		fAudioQualitySlider->SetLabel(buffer);
9596af4da5dSStephan Aßmus 		fAudioQualitySlider->SetLimitLabels(SLIDER_LOW_LABEL,
9606af4da5dSStephan Aßmus 			SLIDER_HIGH_LABEL);
9616af4da5dSStephan Aßmus 	}
9626af4da5dSStephan Aßmus 
9636af4da5dSStephan Aßmus 	float maxLabelLen = 0;
9646af4da5dSStephan Aßmus 	if (fStartDurationTC != NULL) {
9656af4da5dSStephan Aßmus 		fStartDurationTC->SetLabel(START_LABEL);
9666af4da5dSStephan Aßmus 		maxLabelLen = fStartDurationTC->StringWidth(START_LABEL);
9676af4da5dSStephan Aßmus 	}
9686af4da5dSStephan Aßmus 	if (fEndDurationTC != NULL) {
9696af4da5dSStephan Aßmus 		fEndDurationTC->SetLabel(END_LABEL);
9706af4da5dSStephan Aßmus 		maxLabelLen = MAX(maxLabelLen, fEndDurationTC->StringWidth(END_LABEL));
9716af4da5dSStephan Aßmus 	}
9726af4da5dSStephan Aßmus 	if (fStartDurationTC != NULL)
9736af4da5dSStephan Aßmus 		fStartDurationTC->SetDivider(maxLabelLen + 5);
9746af4da5dSStephan Aßmus 	if (fEndDurationTC != NULL)
9756af4da5dSStephan Aßmus 		fEndDurationTC->SetDivider(maxLabelLen + 5);
9766af4da5dSStephan Aßmus 
9776af4da5dSStephan Aßmus 	if (fFormatMenu != NULL) {
9786af4da5dSStephan Aßmus 		fFormatMenu->SetLabel(FORMAT_LABEL);
9796af4da5dSStephan Aßmus 		maxLabelLen = MAX(maxLabelLen, fFormatMenu->StringWidth(
9806af4da5dSStephan Aßmus 			fFormatMenu->Label()));
9816af4da5dSStephan Aßmus 	}
9826af4da5dSStephan Aßmus 	if (fAudioMenu != NULL) {
9836af4da5dSStephan Aßmus 		fAudioMenu->SetLabel(AUDIO_LABEL);
9846af4da5dSStephan Aßmus 		maxLabelLen = MAX(maxLabelLen, fAudioMenu->StringWidth(
9856af4da5dSStephan Aßmus 			fAudioMenu->Label()));
9866af4da5dSStephan Aßmus 	}
9876af4da5dSStephan Aßmus 	if (fVideoMenu != NULL) {
9886af4da5dSStephan Aßmus 		fVideoMenu->SetLabel(VIDEO_LABEL);
9896af4da5dSStephan Aßmus 		maxLabelLen = MAX(maxLabelLen, fVideoMenu->StringWidth(
9906af4da5dSStephan Aßmus 			fVideoMenu->Label()));
9916af4da5dSStephan Aßmus 	}
9926af4da5dSStephan Aßmus 	maxLabelLen += 10;
9936af4da5dSStephan Aßmus 
9946af4da5dSStephan Aßmus 	if (fStartDurationTC != NULL)
9956af4da5dSStephan Aßmus 		fStartDurationTC->SetDivider(maxLabelLen);
9966af4da5dSStephan Aßmus 	if (fEndDurationTC != NULL)
9976af4da5dSStephan Aßmus 		fEndDurationTC->SetDivider(maxLabelLen);
9986af4da5dSStephan Aßmus 	if (fFormatMenu != NULL)
9996af4da5dSStephan Aßmus 		fFormatMenu->SetDivider(maxLabelLen + 3);
10006af4da5dSStephan Aßmus 	if (fAudioMenu != NULL)
10016af4da5dSStephan Aßmus 		fAudioMenu->SetDivider(maxLabelLen + 3);
10026af4da5dSStephan Aßmus 	if (fVideoMenu != NULL)
10036af4da5dSStephan Aßmus 		fVideoMenu->SetDivider(maxLabelLen + 3);
10046af4da5dSStephan Aßmus 
10056af4da5dSStephan Aßmus 	SetFileMessage(DROP_MEDIA_FILE_LABEL);
10066af4da5dSStephan Aßmus }
10076af4da5dSStephan Aßmus 
10086af4da5dSStephan Aßmus 
10096af4da5dSStephan Aßmus void
10106af4da5dSStephan Aßmus MediaConverterWindow::_DestroyMenu()
10116af4da5dSStephan Aßmus {
10126af4da5dSStephan Aßmus 	BMenu* Menu;
10136af4da5dSStephan Aßmus 
10146af4da5dSStephan Aßmus 	while ((Menu = fMenuBar->SubmenuAt(0)) != NULL) {
10156af4da5dSStephan Aßmus 		fMenuBar->RemoveItem(Menu);
10166af4da5dSStephan Aßmus 		delete Menu;
10176af4da5dSStephan Aßmus 	}
10186af4da5dSStephan Aßmus }
10196af4da5dSStephan Aßmus 
10206af4da5dSStephan Aßmus 
10216af4da5dSStephan Aßmus void
10226af4da5dSStephan Aßmus MediaConverterWindow::_CreateMenu()
10236af4da5dSStephan Aßmus {
10246af4da5dSStephan Aßmus 	BMenuItem* item;
10256af4da5dSStephan Aßmus 	BMenu* menu;
10266af4da5dSStephan Aßmus 
10276af4da5dSStephan Aßmus 	menu = new BMenu(FILE_MENU_LABEL);
10286af4da5dSStephan Aßmus 	item = new BMenuItem(OPEN_MENU_LABEL B_UTF8_ELLIPSIS,
10296af4da5dSStephan Aßmus 		new BMessage(OPEN_FILE_MESSAGE));
10306af4da5dSStephan Aßmus 	menu->AddItem(item);
10316af4da5dSStephan Aßmus 	menu->AddSeparatorItem();
10326af4da5dSStephan Aßmus 	item = new BMenuItem(ABOUT_MENU_LABEL B_UTF8_ELLIPSIS,
10336af4da5dSStephan Aßmus 		new BMessage(DISP_ABOUT_MESSAGE));
10346af4da5dSStephan Aßmus 	menu->AddItem(item);
10356af4da5dSStephan Aßmus 	menu->AddSeparatorItem();
10366af4da5dSStephan Aßmus 	item = new BMenuItem(QUIT_MENU_LABEL, new BMessage(QUIT_MESSAGE));
10376af4da5dSStephan Aßmus 	menu->AddItem(item);
10386af4da5dSStephan Aßmus 
10396af4da5dSStephan Aßmus 	fMenuBar->AddItem(menu);
10406af4da5dSStephan Aßmus }
10416af4da5dSStephan Aßmus 
10426af4da5dSStephan Aßmus 
10436af4da5dSStephan Aßmus void
10446af4da5dSStephan Aßmus MediaConverterWindow::_SetOutputFolder(BEntry entry)
10456af4da5dSStephan Aßmus {
10466af4da5dSStephan Aßmus 	BPath path;
10476af4da5dSStephan Aßmus 	entry.GetPath(&path);
10486af4da5dSStephan Aßmus 	fOutputFolder->SetText(path.Path());
10496af4da5dSStephan Aßmus 	fOutputFolder->ResizeToPreferred();
10506af4da5dSStephan Aßmus 	fOutputDir.SetTo(path.Path());
10516af4da5dSStephan Aßmus }
10526af4da5dSStephan Aßmus 
10536af4da5dSStephan Aßmus 
1054