Bug Fixes. Now ask to start the Media Server if not running.

git-svn-id: file:///srv/svn/repos/haiku/trunk/current@4004 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Jérôme Duval
2003-07-17 07:45:37 +00:00
parent ec35b786c8
commit 1410c09015
5 changed files with 75 additions and 31 deletions
-1
View File
@@ -58,7 +58,6 @@ Media::Media()
mWindow = new MediaWindow(rect); mWindow = new MediaWindow(rect);
mWindow->SetSizeLimits(605.0, 10000.0, 378.0, 10000.0); mWindow->SetSizeLimits(605.0, 10000.0, 378.0, 10000.0);
mWindow->Show();
be_roster->StartWatching(BMessenger(this)); be_roster->StartWatching(BMessenger(this));
} }
+8 -1
View File
@@ -29,7 +29,8 @@
#include "MediaViews.h" #include "MediaViews.h"
BarView::BarView(BRect frame) BarView::BarView(BRect frame)
: BView (frame, "barView", B_FOLLOW_LEFT_RIGHT, B_WILL_DRAW ) : BView (frame, "barView", B_FOLLOW_LEFT_RIGHT, B_WILL_DRAW ),
mDisplay(true)
{ {
} }
@@ -38,11 +39,17 @@ BarView::Draw(BRect updateRect)
{ {
BRect r = Bounds(); BRect r = Bounds();
if(mDisplay) {
// Display the 3D Look Divider Bar // Display the 3D Look Divider Bar
SetHighColor(140,140,140,0); SetHighColor(140,140,140,0);
StrokeLine(BPoint(r.left,r.top),BPoint(r.right,r.top)); StrokeLine(BPoint(r.left,r.top),BPoint(r.right,r.top));
SetHighColor(255,255,255,0); SetHighColor(255,255,255,0);
StrokeLine(BPoint(r.left,r.bottom),BPoint(r.right,r.bottom)); StrokeLine(BPoint(r.left,r.bottom),BPoint(r.right,r.bottom));
} else {
SetHighColor(ui_color(B_PANEL_BACKGROUND_COLOR));
StrokeLine(BPoint(r.left,r.top),BPoint(r.right,r.top));
StrokeLine(BPoint(r.left,r.bottom),BPoint(r.right,r.bottom));
}
} }
+1
View File
@@ -31,6 +31,7 @@ class BarView : public BView
public: public:
BarView(BRect frame); BarView(BRect frame);
virtual void Draw(BRect updateRect); virtual void Draw(BRect updateRect);
bool mDisplay;
}; };
class SettingsItem : public BMenuItem class SettingsItem : public BMenuItem
+51 -14
View File
@@ -40,7 +40,7 @@ const uint32 ML_INIT_MEDIA = 'MlIM';
// MediaWindow - Constructor // MediaWindow - Constructor
MediaWindow::MediaWindow(BRect frame) MediaWindow::MediaWindow(BRect frame)
: BWindow (frame, "Media", B_TITLED_WINDOW, B_NORMAL_WINDOW_FEEL , B_ASYNCHRONOUS_CONTROLS), : BWindow (frame, "Media", B_TITLED_WINDOW, B_ASYNCHRONOUS_CONTROLS),
mCurrentNode(NULL), mCurrentNode(NULL),
mParamWeb(NULL), mParamWeb(NULL),
mAlert(NULL) mAlert(NULL)
@@ -201,18 +201,45 @@ void MediaWindow::InitWindow(void)
mBar = new BarView(barRect); mBar = new BarView(barRect);
mBox->AddChild(mBar); mBox->AddChild(mBar);
InitMedia(true); if(InitMedia(true)!=B_OK)
PostMessage(B_QUIT_REQUESTED);
else {
if(IsHidden())
Show();
}
} }
// ---------------------------------------------------------------------------------------------------------- // // ---------------------------------------------------------------------------------------------------------- //
void status_t
MediaWindow::InitMedia(bool first) MediaWindow::InitMedia(bool first)
{ {
status_t err = B_OK;
BMediaRoster *roster = BMediaRoster::Roster(&err);
if(first && err != B_OK) {
BAlert *alert = new BAlert("start_media_server",
"Could not connect to the Media Server.\n"
"Would you like to start it ?", "Quit", "Start Media Server", NULL,
B_WIDTH_AS_USUAL, B_WARNING_ALERT);
if(alert->Go()==0)
return B_ERROR;
mAlert = new MediaAlert(BRect(0,0,300,60),
"restart_alert", "Restarting Media Services\nStarting Media Server...\n");
mAlert->Show();
Show();
launch_media_server();
}
Lock();
bool isVideoSelected = true; bool isVideoSelected = true;
if(!first && mListView->ItemAt(0) && mListView->ItemAt(0)->IsSelected()) if(!first && mListView->ItemAt(0) && mListView->ItemAt(0)->IsSelected())
isVideoSelected = false; isVideoSelected = false;
if(!first && mAlert) { if((!first || (first && err) ) && mAlert) {
BAutolock locker(mAlert); BAutolock locker(mAlert);
if(locker.IsLocked()) if(locker.IsLocked())
mAlert->TextView()->SetText("Ready For Use..."); mAlert->TextView()->SetText("Ready For Use...");
@@ -262,7 +289,6 @@ MediaWindow::InitMedia(bool first)
dormant_node_info node_info; dormant_node_info node_info;
int32 outputID; int32 outputID;
BString outputName; BString outputName;
BMediaRoster* roster = BMediaRoster::Roster();
roster->GetAudioInput(&default_node); roster->GetAudioInput(&default_node);
roster->GetDormantNodeFor(default_node, &node_info); roster->GetDormantNodeFor(default_node, &node_info);
@@ -304,20 +330,28 @@ MediaWindow::InitMedia(bool first)
mListView->Select(mListView->IndexOf(video)); mListView->Select(mListView->IndexOf(video));
else else
mListView->Select(mListView->IndexOf(audio)); mListView->Select(mListView->IndexOf(audio));
}
if(mAlert) { if(mAlert) {
snooze(800000); snooze(800000);
mAlert->PostMessage(B_QUIT_REQUESTED); mAlert->PostMessage(B_QUIT_REQUESTED);
} }
mAlert = NULL; mAlert = NULL;
}
Unlock();
return B_OK;
} }
// MediaWindow::QuitRequested -- Post a message to the app to quit // MediaWindow::QuitRequested -- Post a message to the app to quit
bool bool
MediaWindow::QuitRequested() MediaWindow::QuitRequested()
{ {
// stop watching the MediaRoster
BMediaRoster *roster = BMediaRoster::CurrentRoster();
if (roster && mCurrentNode) {
roster->StopWatching(this, *mCurrentNode, B_MEDIA_WILDCARD);
}
be_app->PostMessage(B_QUIT_REQUESTED); be_app->PostMessage(B_QUIT_REQUESTED);
return true; return true;
} }
@@ -453,6 +487,7 @@ MediaWindow::MessageReceived (BMessage *message)
roster->SetRealtimeFlags(flags); roster->SetRealtimeFlags(flags);
} }
break; break;
case B_MEDIA_WEB_CHANGED:
case ML_SELECTED_NODE: case ML_SELECTED_NODE:
{ {
PRINT_OBJECT(*message); PRINT_OBJECT(*message);
@@ -461,8 +496,11 @@ MediaWindow::MessageReceived (BMessage *message)
if(!item) if(!item)
break; break;
BMediaRoster* roster = BMediaRoster::Roster(); BMediaRoster* roster = BMediaRoster::Roster();
if(mCurrentNode) if(mCurrentNode) {
// stop watching the MediaRoster
roster->StopWatching(this, *mCurrentNode, B_MEDIA_WILDCARD);
roster->ReleaseNode(*mCurrentNode); roster->ReleaseNode(*mCurrentNode);
}
mCurrentNode = NULL; mCurrentNode = NULL;
BView *paramView = mContentView->ChildAt(0); BView *paramView = mContentView->ChildAt(0);
if(paramView!=NULL) { if(paramView!=NULL) {
@@ -499,6 +537,7 @@ MediaWindow::MessageReceived (BMessage *message)
mContentView->AddChild(paramView); mContentView->AddChild(paramView);
paramView->ResizeTo(mContentView->Bounds().Width(), mContentView->Bounds().Height()); paramView->ResizeTo(mContentView->Bounds().Width(), mContentView->Bounds().Height());
roster->StartWatching(this, *mCurrentNode, B_MEDIA_WILDCARD);
} else { } else {
mParamWeb = NULL; mParamWeb = NULL;
BRect bounds = mContentView->Bounds(); BRect bounds = mContentView->Bounds();
@@ -511,13 +550,11 @@ MediaWindow::MessageReceived (BMessage *message)
} }
} }
if(item->OutlineLevel() == 0 || mParamWeb == NULL || mParamWeb->CountGroups()<2) { bool barChanged = (item->OutlineLevel() == 0 || mParamWeb == NULL || mParamWeb->CountGroups()<2);
// Display the 3D Look Divider Bar if(barChanged != mBar->mDisplay) {
if(mBar->IsHidden()) mBar->mDisplay = barChanged;
mBar->Show(); mBar->Invalidate();
} else if(!mBar->IsHidden()) }
mBar->Hide();
} }
break; break;
case B_SOME_APP_LAUNCHED: case B_SOME_APP_LAUNCHED:
+1 -1
View File
@@ -38,7 +38,7 @@ class MediaWindow : public BWindow
virtual void MessageReceived(BMessage *message); virtual void MessageReceived(BMessage *message);
virtual void FrameResized(float width, float height); virtual void FrameResized(float width, float height);
private: private:
void InitMedia(bool first); status_t InitMedia(bool first);
void FindNodes(media_type type, uint64 kind, BList &list); void FindNodes(media_type type, uint64 kind, BList &list);
void AddNodes(BList &list, bool isVideo); void AddNodes(BList &list, bool isVideo);
MediaListItem *FindMediaListItem(dormant_node_info *info); MediaListItem *FindMediaListItem(dormant_node_info *info);