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:
@@ -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));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user