Commit 6304d60d authored by Richard Shepherd's avatar Richard Shepherd

Added DVD device selection from interface menu

parent c751bb66
...@@ -32,6 +32,7 @@ public: ...@@ -32,6 +32,7 @@ public:
virtual bool QuitRequested(); virtual bool QuitRequested();
virtual void MessageReceived(BMessage *message); virtual void MessageReceived(BMessage *message);
intf_thread_t *p_intf; intf_thread_t *p_intf;
BSlider * p_vol; BSlider * p_vol;
BSlider * p_seek; BSlider * p_seek;
...@@ -39,6 +40,9 @@ public: ...@@ -39,6 +40,9 @@ public:
sem_id fScrubSem; sem_id fScrubSem;
bool fSeeking; bool fSeeking;
BFilePanel *file_panel; BFilePanel *file_panel;
private:
int GetCD(const char *directory, BMenu *cd_menu);
}; };
class InterfaceView : public BView class InterfaceView : public BView
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* intf_beos.cpp: beos interface * intf_beos.cpp: beos interface
***************************************************************************** *****************************************************************************
* Copyright (C) 1999, 2000, 2001 VideoLAN * Copyright (C) 1999, 2000, 2001 VideoLAN
* $Id: intf_beos.cpp,v 1.17 2001/03/06 01:26:06 richards Exp $ * $Id: intf_beos.cpp,v 1.18 2001/03/06 19:52:03 richards Exp $
* *
* Authors: Jean-Marc Dressler <polux@via.ecp.fr> * Authors: Jean-Marc Dressler <polux@via.ecp.fr>
* Samuel Hocevar <sam@zoy.org> * Samuel Hocevar <sam@zoy.org>
...@@ -56,6 +56,12 @@ ...@@ -56,6 +56,12 @@
#include <Screen.h> #include <Screen.h>
#include <malloc.h> #include <malloc.h>
#include <string.h> #include <string.h>
#include <Directory.h>
#include <Entry.h>
#include <Path.h>
#include <StorageDefs.h>
#include <scsi.h>
#include <scsiprobe_driver.h>
extern "C" extern "C"
{ {
...@@ -114,13 +120,16 @@ InterfaceWindow::InterfaceWindow( BRect frame, const char *name , intf_thread_t ...@@ -114,13 +120,16 @@ InterfaceWindow::InterfaceWindow( BRect frame, const char *name , intf_thread_t
menu_bar = new BMenuBar(rect, "main menu"); menu_bar = new BMenuBar(rect, "main menu");
AddChild( menu_bar ); AddChild( menu_bar );
BMenu *m; BMenu *m, *cd_menu;
menu_bar->AddItem( m = new BMenu("File") ); menu_bar->AddItem( m = new BMenu("File") );
menu_bar->ResizeToPreferred(); menu_bar->ResizeToPreferred();
m->AddItem( new BMenuItem("Open file...", new BMessage(OPEN_FILE), 'O')); m->AddItem( new BMenuItem("Open File...", new BMessage(OPEN_FILE), 'O'));
m->AddItem( new BMenuItem("Open DVD...", new BMessage(OPEN_DVD), 'D')); cd_menu = new BMenu("Open DVD");
GetCD("/dev/disk", cd_menu);
m->AddItem(cd_menu);
m->AddSeparatorItem(); m->AddSeparatorItem();
m->AddItem( new BMenuItem("About...", new BMessage(B_ABOUT_REQUESTED), 'A'));
m->AddItem( new BMenuItem("Quit", new BMessage(B_QUIT_REQUESTED), 'Q')); m->AddItem( new BMenuItem("Quit", new BMessage(B_QUIT_REQUESTED), 'Q'));
...@@ -231,6 +240,11 @@ void InterfaceWindow::MessageReceived( BMessage * p_message ) ...@@ -231,6 +240,11 @@ void InterfaceWindow::MessageReceived( BMessage * p_message )
Activate(); Activate();
switch( p_message->what ) switch( p_message->what )
{ {
case B_ABOUT_REQUESTED:
alert = new BAlert(VOUT_TITLE, "BeOS " VOUT_TITLE "\n\n<www.videolan.org>", "Ok");
alert->Go();
break;
case OPEN_FILE: case OPEN_FILE:
if(file_panel) if(file_panel)
{ {
...@@ -243,9 +257,13 @@ void InterfaceWindow::MessageReceived( BMessage * p_message ) ...@@ -243,9 +257,13 @@ void InterfaceWindow::MessageReceived( BMessage * p_message )
break; break;
case OPEN_DVD: case OPEN_DVD:
alert = new BAlert(VOUT_TITLE, "Play DVD from menu not yet supported", "Bummer"); const char **device;
alert->Go(); char device_method_and_name[B_FILE_NAME_LENGTH + 4];
//intf_PlstAdd( p_main->p_playlist, PLAYLIST_END, "dvd:/dev/disk/ide/atapi/1/master/0/raw" ); if(p_message->FindString("device", device) != B_ERROR)
{
sprintf(device_method_and_name, "dvd:%s", *device);
intf_PlstAdd( p_main->p_playlist, PLAYLIST_END, device_method_and_name );
}
break; break;
case STOP_PLAYBACK: case STOP_PLAYBACK:
...@@ -390,6 +408,74 @@ bool InterfaceWindow::QuitRequested() ...@@ -390,6 +408,74 @@ bool InterfaceWindow::QuitRequested()
return( false ); return( false );
} }
int InterfaceWindow::GetCD(const char *directory, BMenu *cd_menu)
{
BDirectory dir;
dir.SetTo(directory);
if(dir.InitCheck() != B_NO_ERROR) {
return B_ERROR;
}
dir.Rewind();
BEntry entry;
while(dir.GetNextEntry(&entry) >= 0) {
BPath path;
const char *name;
entry_ref e;
if(entry.GetPath(&path) != B_NO_ERROR)
continue;
name = path.Path();
if(entry.GetRef(&e) != B_NO_ERROR)
continue;
if(entry.IsDirectory()) {
if(strcmp(e.name, "floppy") == 0)
continue; // ignore floppy (it is not silent)
int devfd = GetCD(name, cd_menu);
if(devfd >= 0)
{
return devfd;
}
}
else {
int devfd;
device_geometry g;
status_t m;
if(strcmp(e.name, "raw") != 0)
continue; // ignore partitions
devfd = open(name, O_RDONLY);
if(devfd < 0)
continue;
if(ioctl(devfd, B_GET_GEOMETRY, &g, sizeof(g)) >= 0) {
if(g.device_type == B_CD) //ensure the drive is a CD-ROM
{
if(ioctl(devfd, B_GET_MEDIA_STATUS, &m, sizeof(m)) >= 0 )
if(m == B_NO_ERROR) //ensure media is present
{
BMessage *msg;
msg = new BMessage(OPEN_DVD);
msg->AddString("device", name);
BMenuItem *menu_item;
menu_item = new BMenuItem(name, msg);
cd_menu->AddItem(menu_item);
continue;
}
}
}
close(devfd);
}
}
return B_ERROR;
}
/***************************************************************************** /*****************************************************************************
* MediaSlider * MediaSlider
*****************************************************************************/ *****************************************************************************/
......
...@@ -142,7 +142,7 @@ int32 DrawingThread(void *data) ...@@ -142,7 +142,7 @@ int32 DrawingThread(void *data)
*****************************************************************************/ *****************************************************************************/
VideoWindow::VideoWindow(BRect frame, const char *name, vout_thread_t *p_video_output ) VideoWindow::VideoWindow(BRect frame, const char *name, vout_thread_t *p_video_output )
: BWindow(frame, name, B_DOCUMENT_WINDOW, NULL) : BWindow(frame, name, B_TITLED_WINDOW, NULL)
{ {
float minWidth, minHeight, maxWidth, maxHeight; float minWidth, minHeight, maxWidth, maxHeight;
...@@ -247,7 +247,6 @@ void VideoWindow::Zoom(BPoint origin, float width, float height ) ...@@ -247,7 +247,6 @@ void VideoWindow::Zoom(BPoint origin, float width, float height )
{ {
if(is_zoomed) if(is_zoomed)
{ {
SetLook(B_DOCUMENT_WINDOW_LOOK);
MoveTo(rect.left, rect.top); MoveTo(rect.left, rect.top);
ResizeTo(rect.IntegerWidth(), rect.IntegerHeight()); ResizeTo(rect.IntegerWidth(), rect.IntegerHeight());
be_app->ShowCursor(); be_app->ShowCursor();
...@@ -259,7 +258,6 @@ else ...@@ -259,7 +258,6 @@ else
screen = new BScreen(this); screen = new BScreen(this);
BRect rect = screen->Frame(); BRect rect = screen->Frame();
delete screen; delete screen;
SetLook(B_NO_BORDER_WINDOW_LOOK);
MoveTo(0,0); MoveTo(0,0);
ResizeTo(rect.IntegerWidth(), rect.IntegerHeight()); ResizeTo(rect.IntegerWidth(), rect.IntegerHeight());
be_app->HideCursor(); be_app->HideCursor();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment