Big style cleanup in preparation for refactoring the media preflet and tackling #6544.

Fix one use of sscanf(...) > 0, where it ought to be sscanf(...) == 4.
Otherwise, no functional changes intended.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38865 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Alex Wilson
2010-10-01 02:34:49 +00:00
parent ce6bec05aa
commit a633251fba
10 changed files with 341 additions and 256 deletions
+6 -4
View File
@@ -20,9 +20,10 @@
Media::Media() Media::Media()
: BApplication("application/x-vnd.Haiku-Media") :
BApplication("application/x-vnd.Haiku-Media")
{ {
BRect rect(32,64,637,462); BRect rect(32, 64, 637, 462);
BPath path; BPath path;
if (find_directory(B_USER_SETTINGS_DIRECTORY, &path) == B_OK) { if (find_directory(B_USER_SETTINGS_DIRECTORY, &path) == B_OK) {
@@ -39,7 +40,8 @@ Media::Media()
i++; i++;
} }
int32 a, b, c, d; int32 a, b, c, d;
if (sscanf(&buffer[i], " rect = %li,%li,%li,%li", &a, &b, &c, &d) > 0) { const char* scanString = " rect = %li,%li,%li,%li";
if (sscanf(&buffer[i], scanString, &a, &b, &c, &d) == 4) {
if (c - a >= rect.IntegerWidth()) { if (c - a >= rect.IntegerWidth()) {
rect.left = a; rect.left = a;
rect.right = c; rect.right = c;
@@ -75,7 +77,7 @@ Media::InitCheck()
void void
Media::MessageReceived(BMessage *message) Media::MessageReceived(BMessage* message)
{ {
switch (message->what) { switch (message->what) {
case B_SOME_APP_LAUNCHED: case B_SOME_APP_LAUNCHED:
+7 -7
View File
@@ -18,15 +18,15 @@
class Media : public BApplication { class Media : public BApplication {
public: public:
Media(); Media();
virtual ~Media(); virtual ~Media();
virtual void MessageReceived(BMessage* message); virtual void MessageReceived(BMessage* message);
status_t InitCheck(); status_t InitCheck();
private: private:
MediaWindow* fWindow; MediaWindow* fWindow;
}; };
#endif // MEDIA_H #endif // MEDIA_H
+5 -4
View File
@@ -41,10 +41,10 @@ private:
MediaAlert::MediaAlert(BRect _rect, const char* title, const char* text) MediaAlert::MediaAlert(BRect _rect, const char* title, const char* text)
: BWindow(_rect, title, B_MODAL_WINDOW, B_NOT_CLOSABLE | B_NOT_RESIZABLE) :
BWindow(_rect, title, B_MODAL_WINDOW, B_NOT_CLOSABLE | B_NOT_RESIZABLE),
fTextView(NULL)
{ {
fTextView = NULL;
// Set up the "_master_" view // Set up the "_master_" view
TAlertView* masterView = new TAlertView(Bounds()); TAlertView* masterView = new TAlertView(Bounds());
masterView->SetBitmap(InitIcon()); masterView->SetBitmap(InitIcon());
@@ -131,7 +131,8 @@ MediaAlert::InitIcon()
TAlertView::TAlertView(BRect frame) TAlertView::TAlertView(BRect frame)
: BView(frame, "TAlertView", B_FOLLOW_ALL_SIDES, B_WILL_DRAW), :
BView(frame, "TAlertView", B_FOLLOW_ALL_SIDES, B_WILL_DRAW),
fIconBitmap(NULL) fIconBitmap(NULL)
{ {
SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR)); SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));
+7 -11
View File
@@ -12,29 +12,25 @@
// Created : June 25, 2003 // Created : June 25, 2003
// //
// ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ // ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
#ifndef _MEDIAALERT_H #ifndef _MEDIAALERT_H
#define _MEDIAALERT_H #define _MEDIAALERT_H
// System Includes -------------------------------------------------------------
#include <Window.h> #include <Window.h>
#include <Bitmap.h> #include <Bitmap.h>
#include <TextView.h> #include <TextView.h>
// MediaAlert class ----------------------------------------------------------------
class MediaAlert : public BWindow class MediaAlert : public BWindow
{ {
public: public:
MediaAlert(BRect rect, const char* title,
MediaAlert(BRect rect, const char* title, const char* text); const char* text);
virtual ~MediaAlert(); virtual ~MediaAlert();
BTextView* TextView() const; BTextView* TextView() const;
private: private:
BBitmap *InitIcon(); BBitmap* InitIcon();
BTextView* fTextView;
BTextView *fTextView;
}; };
//------------------------------------------------------------------------------
#endif // _MEDIAALERT_H #endif // _MEDIAALERT_H
+42 -25
View File
@@ -14,18 +14,20 @@
// ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ // ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
// Includes -------------------------------------------------------------------------------------------------- // #include "MediaListItem.h"
#include <string.h> #include <string.h>
#include <View.h> #include <View.h>
#include "MediaListItem.h"
#define kITEM_MARGIN 1 #define kITEM_MARGIN 1
// MediaListItem - Constructor
MediaListItem::MediaListItem(dormant_node_info *info, uint32 level, bool isVideo, BList *icons, uint32 modifiers) MediaListItem::MediaListItem(dormant_node_info* info, uint32 level,
: BListItem(level), bool isVideo, BList* icons, uint32 modifiers)
:
BListItem(level),
fIsAudioMixer(false), fIsAudioMixer(false),
fIsVideo(isVideo), fIsVideo(isVideo),
fIsDefaultInput(false), fIsDefaultInput(false),
@@ -38,8 +40,11 @@ MediaListItem::MediaListItem(dormant_node_info *info, uint32 level, bool isVideo
SetHeight(16 + kITEM_MARGIN); SetHeight(16 + kITEM_MARGIN);
} }
MediaListItem::MediaListItem(const char *label, uint32 level, bool isVideo, BList *icons, uint32 modifiers)
: BListItem(level), MediaListItem::MediaListItem(const char* label, uint32 level,
bool isVideo, BList* icons, uint32 modifiers)
:
BListItem(level),
fLabel(label), fLabel(label),
fIsAudioMixer(false), fIsAudioMixer(false),
fIsVideo(isVideo), fIsVideo(isVideo),
@@ -52,15 +57,15 @@ MediaListItem::MediaListItem(const char *label, uint32 level, bool isVideo, BLis
SetHeight(16 + kITEM_MARGIN); SetHeight(16 + kITEM_MARGIN);
} }
MediaListItem::~MediaListItem() MediaListItem::~MediaListItem()
{ {
} }
//--------------------------------------------------------------------------------------------------------------//
//MediaListItem - DrawItem //MediaListItem - DrawItem
void void
MediaListItem::DrawItem(BView *owner, BRect frame, bool complete) MediaListItem::DrawItem(BView* owner, BRect frame, bool complete)
{ {
rgb_color kHighlight = { 140,140,140,0 }; rgb_color kHighlight = { 140,140,140,0 };
rgb_color kBlack = { 0,0,0,0 }; rgb_color kBlack = { 0,0,0,0 };
@@ -84,7 +89,8 @@ MediaListItem::DrawItem(BView *owner, BRect frame, bool complete)
frame.left += 4; frame.left += 4;
BRect iconFrame(frame); BRect iconFrame(frame);
iconFrame.Set(iconFrame.left, iconFrame.top+1, iconFrame.left+15, iconFrame.top+16); iconFrame.Set(iconFrame.left, iconFrame.top+1,
iconFrame.left+15, iconFrame.top+16);
uint32 index = 0; uint32 index = 0;
if (OutlineLevel()==0 || (fIsDefaultInput && fIsDefaultOutput)) { if (OutlineLevel()==0 || (fIsDefaultInput && fIsDefaultOutput)) {
if (fIsDefaultInput && fIsVideo) if (fIsDefaultInput && fIsVideo)
@@ -92,7 +98,9 @@ MediaListItem::DrawItem(BView *owner, BRect frame, bool complete)
else if (fIsDefaultInput && !fIsVideo) else if (fIsDefaultInput && !fIsVideo)
index = 2; index = 2;
owner->SetDrawingMode(B_OP_OVER); owner->SetDrawingMode(B_OP_OVER);
owner->DrawBitmap(static_cast<BBitmap*>(fIcons->ItemAt(index)), iconFrame);
BBitmap* icon = static_cast<BBitmap*>(fIcons->ItemAt(index));
owner->DrawBitmap(icon, iconFrame);
owner->SetDrawingMode(B_OP_COPY); owner->SetDrawingMode(B_OP_COPY);
} }
iconFrame.OffsetBy(16, 0); iconFrame.OffsetBy(16, 0);
@@ -111,22 +119,25 @@ MediaListItem::DrawItem(BView *owner, BRect frame, bool complete)
index = 2; index = 2;
} }
owner->SetDrawingMode(B_OP_OVER); owner->SetDrawingMode(B_OP_OVER);
owner->DrawBitmap(static_cast<BBitmap*>(fIcons->ItemAt(index)), iconFrame); BBitmap* icon = static_cast<BBitmap*>(fIcons->ItemAt(index));
owner->DrawBitmap(icon, iconFrame);
owner->SetDrawingMode(B_OP_COPY); owner->SetDrawingMode(B_OP_COPY);
} }
frame.left += 16 * (OutlineLevel() + 1); frame.left += 16 * (OutlineLevel() + 1);
owner->SetHighColor(kBlack); owner->SetHighColor(kBlack);
BFont font = be_plain_font; BFont font = be_plain_font;
font_height finfo; font_height fontInfo;
font.GetHeight(&finfo); font.GetHeight(&fontInfo);
float lineHeight = fontInfo.ascent + fontInfo.descent + fontInfo.leading;
owner->SetFont(&font); owner->SetFont(&font);
owner->MovePenTo(frame.left+8, frame.top + ((frame.Height() - (finfo.ascent + finfo.descent + finfo.leading)) / 2) + owner->MovePenTo(frame.left + 8, frame.top
(finfo.ascent + finfo.descent) - 1); + ((frame.Height() - (lineHeight)) / 2)
+ (fontInfo.ascent + fontInfo.descent) - 1);
owner->DrawString(fLabel); owner->DrawString(fLabel);
} }
//--------------------------------------------------------------------------------------------------------------//
void void
MediaListItem::SetDefault(bool isDefault, bool isInput) MediaListItem::SetDefault(bool isDefault, bool isInput)
@@ -137,14 +148,16 @@ MediaListItem::SetDefault(bool isDefault, bool isInput)
fIsDefaultOutput = isDefault; fIsDefaultOutput = isDefault;
} }
void void
MediaListItem::SetAudioMixer(bool isAudioMixer) MediaListItem::SetAudioMixer(bool isAudioMixer)
{ {
fIsAudioMixer = isAudioMixer; fIsAudioMixer = isAudioMixer;
} }
void void
MediaListItem::Update(BView *owner, const BFont *finfo) MediaListItem::Update(BView* owner, const BFont* finfo)
{ {
// we need to override the update method so we can make sure are // we need to override the update method so we can make sure are
// list item size doesn't change // list item size doesn't change
@@ -154,16 +167,20 @@ MediaListItem::Update(BView *owner, const BFont *finfo)
} }
} }
int int
MediaListItem::Compare(const void *firstArg, const void *secondArg) MediaListItem::Compare(const void* firstArg, const void* secondArg)
{ {
const MediaListItem *item1 = *static_cast<const MediaListItem * const *>(firstArg); const MediaListItem* item1
const MediaListItem *item2 = *static_cast<const MediaListItem * const *>(secondArg); = *static_cast<const MediaListItem * const *>(firstArg);
const MediaListItem* item2
= *static_cast<const MediaListItem * const *>(secondArg);
if (item1->fIsVideo != item2->fIsVideo) if (item1->fIsVideo != item2->fIsVideo)
return item1->fIsVideo ? 1 : -1; return item1->fIsVideo ? 1 : -1;
if (item1->OutlineLevel()!=item2->OutlineLevel()) if (item1->OutlineLevel() != item2->OutlineLevel())
return item1->OutlineLevel()>item2->OutlineLevel() ? 1 : -1; return item1->OutlineLevel() > item2->OutlineLevel() ? 1 : -1;
if (item1->fIsAudioMixer!=item2->fIsAudioMixer) if (item1->fIsAudioMixer != item2->fIsAudioMixer)
return item2->fIsAudioMixer ? 1 : -1; return item2->fIsAudioMixer ? 1 : -1;
return strcmp(item1->fLabel, item2->fLabel); return strcmp(item1->fLabel, item2->fLabel);
} }
+35 -22
View File
@@ -21,33 +21,46 @@
class MediaListItem : public BListItem { class MediaListItem : public BListItem {
public: public:
MediaListItem(dormant_node_info *info, uint32 level, bool isVideo, BList *icons, uint32 modifiers=0); MediaListItem(dormant_node_info* info,
MediaListItem(const char* label, uint32 level, bool isVideo, BList *icons, uint32 modifiers=0); uint32 level, bool isVideo, BList* icons,
~MediaListItem(); uint32 modifiers=0);
MediaListItem(const char* label, uint32 level,
bool isVideo, BList* icons,
uint32 modifiers=0);
virtual ~MediaListItem();
virtual void Update(BView *owner, const BFont *finfo); virtual void Update(BView* owner, const BFont* font);
virtual void DrawItem(BView *owner, BRect frame, bool complete = false); virtual void DrawItem(BView* owner, BRect frame,
bool complete = false);
void SetDefault(bool isDefaultInput, bool isInput); void SetDefault(bool isDefaultInput, bool isInput);
void SetAudioMixer(bool isAudioMixer); void SetAudioMixer(bool isAudioMixer);
bool IsDefault(bool isInput) { return isInput ? fIsDefaultInput : fIsDefaultOutput; }
bool IsAudioMixer() { return fIsAudioMixer; }
bool IsVideo() { return fIsVideo; }
const char *GetLabel() { return fLabel; }
dormant_node_info *fInfo;
static int Compare(const void *firstArg, const void *secondArg); bool IsDefault(bool isInput)
{
return isInput ? fIsDefaultInput : fIsDefaultOutput;
}
bool IsAudioMixer() { return fIsAudioMixer; }
bool IsVideo() { return fIsVideo; }
const char* GetLabel() { return fLabel; }
private:
const char *fLabel; dormant_node_info* fInfo;
bool fIsAudioMixer;
bool fIsVideo; static int Compare(const void* firstArg,
bool fIsDefaultInput; const void* secondArg);
bool fIsDefaultOutput;
//dormant_node_info fNodeInfo; private:
BList *fIcons; const char* fLabel;
bool fIsAudioMixer;
bool fIsVideo;
bool fIsDefaultInput;
bool fIsDefaultOutput;
//dormant_node_info fNodeInfo;
BList* fIcons;
}; };
#endif /* __MEDIALISTITEM_H__ */ #endif /* __MEDIALISTITEM_H__ */
+56 -40
View File
@@ -14,8 +14,7 @@
// ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ // ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
// Includes -------------------------------------------------------------------------------------------------- // #include "MediaViews.h"
#include <stdio.h>
#include <Box.h> #include <Box.h>
#include <Button.h> #include <Button.h>
@@ -32,7 +31,7 @@
#include <String.h> #include <String.h>
#include <TextView.h> #include <TextView.h>
#include "MediaViews.h" #include <stdio.h>
#undef B_TRANSLATE_CONTEXT #undef B_TRANSLATE_CONTEXT
@@ -40,11 +39,13 @@
BarView::BarView() BarView::BarView()
: BView ("barView", B_WILL_DRAW ), :
BView("barView", B_WILL_DRAW ),
fDisplay(true) fDisplay(true)
{ {
} }
void void
BarView::Draw(BRect updateRect) BarView::Draw(BRect updateRect)
{ {
@@ -65,12 +66,13 @@ BarView::Draw(BRect updateRect)
SettingsView::SettingsView (bool isVideo) SettingsView::SettingsView (bool isVideo)
: BView ("SettingsView", B_WILL_DRAW | B_SUPPORTS_LAYOUT), :
BView("SettingsView", B_WILL_DRAW | B_SUPPORTS_LAYOUT),
fIsVideo(isVideo) fIsVideo(isVideo)
{ {
SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR)); SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));
BBox *defaultsBox = new BBox("defaults"); BBox* defaultsBox = new BBox("defaults");
defaultsBox->SetLabel(fIsVideo ? B_TRANSLATE("Default nodes") defaultsBox->SetLabel(fIsVideo ? B_TRANSLATE("Default nodes")
: B_TRANSLATE("Defaults")); : B_TRANSLATE("Defaults"));
@@ -89,14 +91,14 @@ SettingsView::SettingsView (bool isVideo)
: B_TRANSLATE("Audio output:")) + 5; : B_TRANSLATE("Audio output:")) + 5;
fMenu1 = new BPopUpMenu(B_TRANSLATE("<none>")); fMenu1 = new BPopUpMenu(B_TRANSLATE("<none>"));
fMenu1->SetLabelFromMarked(true); fMenu1->SetLabelFromMarked(true);
BMenuField *menuField1 = new BMenuField("menuField1", BMenuField* menuField1 = new BMenuField("menuField1",
fIsVideo ? B_TRANSLATE("Video input:") fIsVideo ? B_TRANSLATE("Video input:")
: B_TRANSLATE("Audio input:"), fMenu1, NULL); : B_TRANSLATE("Audio input:"), fMenu1, NULL);
menuField1->SetDivider(divider); menuField1->SetDivider(divider);
fMenu2 = new BPopUpMenu(B_TRANSLATE("<none>")); fMenu2 = new BPopUpMenu(B_TRANSLATE("<none>"));
fMenu2->SetLabelFromMarked(true); fMenu2->SetLabelFromMarked(true);
BMenuField *menuField2 = new BMenuField("menuField2", BMenuField* menuField2 = new BMenuField("menuField2",
fIsVideo ? B_TRANSLATE("Video output:") fIsVideo ? B_TRANSLATE("Video output:")
: B_TRANSLATE("Audio output:"), fMenu2, NULL); : B_TRANSLATE("Audio output:"), fMenu2, NULL);
menuField2->SetDivider(divider); menuField2->SetDivider(divider);
@@ -104,7 +106,7 @@ SettingsView::SettingsView (bool isVideo)
inputField->GroupLayout()->AddView(menuField1); inputField->GroupLayout()->AddView(menuField1);
outputField->GroupLayout()->AddView(menuField2); outputField->GroupLayout()->AddView(menuField2);
BMenuField *menuField3 = NULL; BMenuField* menuField3 = NULL;
if (!fIsVideo) { if (!fIsVideo) {
fMenu3 = new BPopUpMenu(B_TRANSLATE("<none>")); fMenu3 = new BPopUpMenu(B_TRANSLATE("<none>"));
fMenu3->SetLabelFromMarked(true); fMenu3->SetLabelFromMarked(true);
@@ -122,10 +124,10 @@ SettingsView::SettingsView (bool isVideo)
fRestartView->Hide(); fRestartView->Hide();
// create the realtime box // create the realtime box
BBox *realtimeBox = new BBox("realtime"); BBox* realtimeBox = new BBox("realtime");
realtimeBox->SetLabel(B_TRANSLATE("Real-time")); realtimeBox->SetLabel(B_TRANSLATE("Real-time"));
BMessage *message = new BMessage(ML_ENABLE_REAL_TIME); BMessage* message = new BMessage(ML_ENABLE_REAL_TIME);
message->AddBool("isVideo", fIsVideo); message->AddBool("isVideo", fIsVideo);
fRealtimeCheckBox = new BCheckBox("realtimeCheckBox", fRealtimeCheckBox = new BCheckBox("realtimeCheckBox",
fIsVideo ? B_TRANSLATE("Enable real-time video") fIsVideo ? B_TRANSLATE("Enable real-time video")
@@ -137,7 +139,7 @@ SettingsView::SettingsView (bool isVideo)
if (flags & (fIsVideo ? B_MEDIA_REALTIME_VIDEO : B_MEDIA_REALTIME_AUDIO)) if (flags & (fIsVideo ? B_MEDIA_REALTIME_VIDEO : B_MEDIA_REALTIME_AUDIO))
fRealtimeCheckBox->SetValue(B_CONTROL_ON); fRealtimeCheckBox->SetValue(B_CONTROL_ON);
BTextView *textView = new BTextView("stringView"); BTextView* textView = new BTextView("stringView");
textView->Insert(fIsVideo ? B_TRANSLATE( textView->Insert(fIsVideo ? B_TRANSLATE(
"Enabling real-time video allows system to " "Enabling real-time video allows system to "
"perform video operations as fast and smoothly as possible. It " "perform video operations as fast and smoothly as possible. It "
@@ -145,8 +147,10 @@ SettingsView::SettingsView (bool isVideo)
"\n\nOnly enable this feature if you need the lowest latency possible.") "\n\nOnly enable this feature if you need the lowest latency possible.")
: B_TRANSLATE( : B_TRANSLATE(
"Enabling real-time audio allows system to record and play audio " "Enabling real-time audio allows system to record and play audio "
"as fast as possible. It achieves this performance by using more CPU and RAM." "as fast as possible. It achieves this performance by using more"
"\n\nOnly enable this feature if you need the lowest latency possible.")); " CPU and RAM.\n\nOnly enable this feature if you need the lowest"
" latency possible."));
textView->MakeEditable(false); textView->MakeEditable(false);
textView->MakeSelectable(false); textView->MakeSelectable(false);
textView->SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR)); textView->SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));
@@ -161,7 +165,7 @@ SettingsView::SettingsView (bool isVideo)
// create the bottom line: volumen in deskbar checkbox and restart button // create the bottom line: volumen in deskbar checkbox and restart button
BGroupView* bottomView = new BGroupView(B_HORIZONTAL); BGroupView* bottomView = new BGroupView(B_HORIZONTAL);
BButton *restartButton = new BButton("restartButton", BButton* restartButton = new BButton("restartButton",
B_TRANSLATE("Restart media services"), B_TRANSLATE("Restart media services"),
new BMessage(ML_RESTART_MEDIA_SERVER)); new BMessage(ML_RESTART_MEDIA_SERVER));
@@ -187,49 +191,57 @@ SettingsView::SettingsView (bool isVideo)
rootlayout->AddView(bottomView); rootlayout->AddView(bottomView);
} }
void void
SettingsView::AddNodes(BList &list, bool isInput) SettingsView::AddNodes(BList& list, bool isInput)
{ {
BMenu *menu = isInput ? fMenu1 : fMenu2; BMenu* menu = isInput ? fMenu1 : fMenu2;
void *item; void* item;
while ((item = menu->RemoveItem((int32)0)) != NULL) while ((item = menu->RemoveItem((int32)0)) != NULL)
delete static_cast<dormant_node_info *>(item); delete static_cast<dormant_node_info*>(item);
BMessage message(ML_DEFAULT_CHANGE); BMessage message(ML_DEFAULT_CHANGE);
message.AddBool("isVideo", fIsVideo); message.AddBool("isVideo", fIsVideo);
message.AddBool("isInput", isInput); message.AddBool("isInput", isInput);
for (int32 i = 0; i < list.CountItems(); i++) { for (int32 i = 0; i < list.CountItems(); i++) {
dormant_node_info *info = static_cast<dormant_node_info *>(list.ItemAt(i)); dormant_node_info* info
= static_cast<dormant_node_info*>(list.ItemAt(i));
menu->AddItem(new SettingsItem(info, new BMessage(message))); menu->AddItem(new SettingsItem(info, new BMessage(message)));
} }
} }
void void
SettingsView::SetDefault(dormant_node_info &info, bool isInput, int32 outputID) SettingsView::SetDefault(dormant_node_info &info, bool isInput, int32 outputID)
{ {
BMenu *menu = isInput ? fMenu1 : fMenu2; BMenu* menu = isInput ? fMenu1 : fMenu2;
for (int32 i = 0; i < menu->CountItems(); i++) { for (int32 i = 0; i < menu->CountItems(); i++) {
SettingsItem *item = static_cast<SettingsItem *>(menu->ItemAt(i)); SettingsItem* item = static_cast<SettingsItem*>(menu->ItemAt(i));
if (item->fInfo && item->fInfo->addon == info.addon && item->fInfo->flavor_id == info.flavor_id) { if (item->fInfo && item->fInfo->addon == info.addon
&& item->fInfo->flavor_id == info.flavor_id) {
item->SetMarked(true); item->SetMarked(true);
break; break;
} }
} }
if (!fIsVideo&&!isInput&&outputID>-1) { if (!fIsVideo && !isInput && outputID >= 0) {
BMenuItem *item; BMenuItem* item;
while ((item = fMenu3->RemoveItem((int32)0)) != NULL) while ((item = fMenu3->RemoveItem((int32)0)) != NULL)
delete item; delete item;
BMediaRoster *roster = BMediaRoster::Roster();
BMediaRoster* roster = BMediaRoster::Roster();
media_node node; media_node node;
media_node_id node_id; media_node_id node_id;
status_t err; status_t err;
if (roster->GetInstancesFor(info.addon, info.flavor_id, &node_id)!=B_OK) if (roster->GetInstancesFor(info.addon, info.flavor_id,
err = roster->InstantiateDormantNode(info, &node, B_FLAVOR_IS_GLOBAL); &node_id) != B_OK) {
else err = roster->InstantiateDormantNode(info, &node,
B_FLAVOR_IS_GLOBAL);
} else {
err = roster->GetNodeFor(node_id, &node); err = roster->GetNodeFor(node_id, &node);
}
if (err == B_OK) { if (err == B_OK) {
media_input inputs[16]; media_input inputs[16];
@@ -238,9 +250,11 @@ SettingsView::SetDefault(dormant_node_info &info, bool isInput, int32 outputID)
BMessage message(ML_DEFAULTOUTPUT_CHANGE); BMessage message(ML_DEFAULTOUTPUT_CHANGE);
for (int32 i = 0; i < inputCount; i++) { for (int32 i = 0; i < inputCount; i++) {
media_input *input = new media_input(); media_input* input = new media_input();
memcpy(input, &inputs[i], sizeof(*input)); memcpy(input, &inputs[i], sizeof(*input));
fMenu3->AddItem(item = new Settings2Item(&info, input, new BMessage(message))); item = new Settings2Item(&info, input,
new BMessage(message));
fMenu3->AddItem(item);
if (inputs[i].destination.id == outputID) if (inputs[i].destination.id == outputID)
item->SetMarked(true); item->SetMarked(true);
} }
@@ -249,9 +263,11 @@ SettingsView::SetDefault(dormant_node_info &info, bool isInput, int32 outputID)
} }
} }
SettingsItem::SettingsItem(dormant_node_info *info, BMessage *message,
char shortcut, uint32 modifiers) SettingsItem::SettingsItem(dormant_node_info* info, BMessage* message,
: BMenuItem(info->name, message, shortcut, modifiers), char shortcut, uint32 modifiers)
:
BMenuItem(info->name, message, shortcut, modifiers),
fInfo(info) fInfo(info)
{ {
@@ -259,7 +275,7 @@ SettingsItem::SettingsItem(dormant_node_info *info, BMessage *message,
status_t status_t
SettingsItem::Invoke(BMessage *message) SettingsItem::Invoke(BMessage* message)
{ {
if (IsMarked()) if (IsMarked())
return B_OK; return B_OK;
@@ -267,13 +283,13 @@ SettingsItem::Invoke(BMessage *message)
} }
Settings2Item::Settings2Item(dormant_node_info *info, media_input *input, BMessage *message, Settings2Item::Settings2Item(dormant_node_info* info, media_input* input,
char shortcut, uint32 modifiers) BMessage* message, char shortcut, uint32 modifiers)
: BMenuItem(input->name, message, shortcut, modifiers), :
BMenuItem(input->name, message, shortcut, modifiers),
fInfo(info), fInfo(info),
fInput(input) fInput(input)
{ {
} }
@@ -284,7 +300,7 @@ Settings2Item::~Settings2Item()
status_t status_t
Settings2Item::Invoke(BMessage *message) Settings2Item::Invoke(BMessage* message)
{ {
if (IsMarked()) if (IsMarked())
return B_OK; return B_OK;
+45 -28
View File
@@ -17,59 +17,76 @@
#ifndef __MEDIAVIEWS_H__ #ifndef __MEDIAVIEWS_H__
#define __MEDIAVIEWS_H__ #define __MEDIAVIEWS_H__
#include <CheckBox.h> #include <CheckBox.h>
#include <MediaAddOn.h>
#include <MenuItem.h> #include <MenuItem.h>
#include <StringView.h> #include <StringView.h>
#include <View.h> #include <View.h>
const uint32 ML_RESTART_MEDIA_SERVER = 'resr'; const uint32 ML_RESTART_MEDIA_SERVER = 'resr';
const uint32 ML_SHOW_VOLUME_CONTROL = 'shvc'; const uint32 ML_SHOW_VOLUME_CONTROL = 'shvc';
const uint32 ML_ENABLE_REAL_TIME = 'enrt'; const uint32 ML_ENABLE_REAL_TIME = 'enrt';
const uint32 ML_DEFAULT_CHANGE = 'dech'; const uint32 ML_DEFAULT_CHANGE = 'dech';
const uint32 ML_DEFAULTOUTPUT_CHANGE = 'doch'; const uint32 ML_DEFAULTOUTPUT_CHANGE = 'doch';
class BarView : public BView class BarView : public BView
{ {
public: public:
BarView(); BarView();
virtual void Draw(BRect updateRect); virtual void Draw(BRect updateRect);
bool fDisplay;
bool fDisplay;
}; };
class SettingsItem : public BMenuItem class SettingsItem : public BMenuItem
{ {
public: public:
SettingsItem(dormant_node_info *info, BMessage *message, SettingsItem(dormant_node_info* info,
char shortcut = 0, uint32 modifiers = 0); BMessage* message, char shortcut = 0,
dormant_node_info *fInfo; uint32 modifiers = 0);
virtual status_t Invoke(BMessage *message = NULL); virtual status_t Invoke(BMessage* message = NULL);
dormant_node_info* fInfo;
}; };
class Settings2Item : public BMenuItem class Settings2Item : public BMenuItem
{ {
public: public:
Settings2Item(dormant_node_info *info, media_input *input, BMessage *message, Settings2Item(dormant_node_info* info,
char shortcut = 0, uint32 modifiers = 0); media_input* input, BMessage* message,
virtual ~Settings2Item(); char shortcut = 0, uint32 modifiers = 0);
virtual status_t Invoke(BMessage *message = NULL); virtual ~Settings2Item();
dormant_node_info *fInfo; virtual status_t Invoke(BMessage* message = NULL);
media_input *fInput;
dormant_node_info* fInfo;
media_input* fInput;
}; };
class SettingsView : public BView class SettingsView : public BView
{ {
public: public:
SettingsView(bool isVideo); SettingsView(bool isVideo);
void AddNodes(BList &list, bool isInput); void AddNodes(BList &list, bool isInput);
void SetDefault(dormant_node_info &info, bool isInput, int32 outputID = -1); void SetDefault(dormant_node_info &info,
BCheckBox *fRealtimeCheckBox; bool isInput, int32 outputID = -1);
BCheckBox *fVolumeCheckBox;
BMenu *fMenu1;
BMenu *fMenu2;
BMenu *fMenu3;
BStringView *fRestartView;
private: BCheckBox* fRealtimeCheckBox;
bool fIsVideo; BCheckBox* fVolumeCheckBox;
BMenu* fMenu1;
// input menu
BMenu* fMenu2;
// output menu
BMenu* fMenu3;
// channel menu (audio only)
BStringView* fRestartView;
private:
bool fIsVideo;
}; };
#endif #endif
+95 -80
View File
@@ -7,6 +7,8 @@
*/ */
#include "MediaWindow.h"
#include <stdio.h> #include <stdio.h>
#include <Alert.h> #include <Alert.h>
@@ -19,8 +21,8 @@
#include <Deskbar.h> #include <Deskbar.h>
#include <GroupView.h> #include <GroupView.h>
#include <Locale.h> #include <Locale.h>
#include <MediaTheme.h>
#include <MediaRoster.h> #include <MediaRoster.h>
#include <MediaTheme.h>
#include <Roster.h> #include <Roster.h>
#include <Screen.h> #include <Screen.h>
#include <ScrollView.h> #include <ScrollView.h>
@@ -28,7 +30,6 @@
#include <StorageKit.h> #include <StorageKit.h>
#include <String.h> #include <String.h>
#include <TextView.h> #include <TextView.h>
#include "MediaWindow.h"
// Images // Images
#include "iconfile.h" #include "iconfile.h"
@@ -43,8 +44,9 @@ const uint32 ML_INIT_MEDIA = 'MlIM';
// MediaWindow - Constructor // MediaWindow - Constructor
MediaWindow::MediaWindow(BRect frame) MediaWindow::MediaWindow(BRect frame)
: BWindow (frame, B_TRANSLATE("Media"), B_TITLED_WINDOW, :
B_ASYNCHRONOUS_CONTROLS | B_AUTO_UPDATE_SIZE_LIMITS), BWindow (frame, B_TRANSLATE("Media"), B_TITLED_WINDOW,
B_ASYNCHRONOUS_CONTROLS | B_AUTO_UPDATE_SIZE_LIMITS),
fCurrentNode(NULL), fCurrentNode(NULL),
fParamWeb(NULL), fParamWeb(NULL),
fAlert(NULL), fAlert(NULL),
@@ -61,19 +63,18 @@ MediaWindow::InitCheck()
} }
// MediaWindow - Destructor
MediaWindow::~MediaWindow() MediaWindow::~MediaWindow()
{ {
for (int i = 0; i<fAudioOutputs.CountItems(); i++) for (int i = 0; i < fAudioOutputs.CountItems(); i++)
delete static_cast<dormant_node_info *>(fAudioOutputs.ItemAt(i)); delete static_cast<dormant_node_info*>(fAudioOutputs.ItemAt(i));
for (int i = 0; i<fAudioInputs.CountItems(); i++) for (int i = 0; i < fAudioInputs.CountItems(); i++)
delete static_cast<dormant_node_info *>(fAudioInputs.ItemAt(i)); delete static_cast<dormant_node_info*>(fAudioInputs.ItemAt(i));
for (int i = 0; i<fVideoOutputs.CountItems(); i++) for (int i = 0; i < fVideoOutputs.CountItems(); i++)
delete static_cast<dormant_node_info *>(fVideoOutputs.ItemAt(i)); delete static_cast<dormant_node_info*>(fVideoOutputs.ItemAt(i));
for (int i = 0; i<fVideoInputs.CountItems(); i++) for (int i = 0; i < fVideoInputs.CountItems(); i++)
delete static_cast<dormant_node_info *>(fVideoInputs.ItemAt(i)); delete static_cast<dormant_node_info*>(fVideoInputs.ItemAt(i));
BMediaRoster *roster = BMediaRoster::Roster(); BMediaRoster* roster = BMediaRoster::Roster();
if (roster && fCurrentNode) if (roster && fCurrentNode)
roster->ReleaseNode(*fCurrentNode); roster->ReleaseNode(*fCurrentNode);
@@ -100,8 +101,8 @@ MediaWindow::FindNodes(media_type type, uint64 kind, BList &list)
dormant_node_info node_info[64]; dormant_node_info node_info[64];
int32 node_info_count = 64; int32 node_info_count = 64;
media_format format; media_format format;
media_format *format1 = NULL, *format2 = NULL; media_format* format1 = NULL, *format2 = NULL;
BMediaRoster *roster = BMediaRoster::Roster(); BMediaRoster* roster = BMediaRoster::Roster();
format.type = type; format.type = type;
if (kind & B_PHYSICAL_OUTPUT) if (kind & B_PHYSICAL_OUTPUT)
@@ -120,7 +121,7 @@ MediaWindow::FindNodes(media_type type, uint64 kind, BList &list)
for (int32 i = 0; i<node_info_count; i++) { for (int32 i = 0; i<node_info_count; i++) {
PRINT(("node : %s, media_addon %i, flavor_id %i\n", PRINT(("node : %s, media_addon %i, flavor_id %i\n",
node_info[i].name, node_info[i].addon, node_info[i].flavor_id)); node_info[i].name, node_info[i].addon, node_info[i].flavor_id));
dormant_node_info *info = new dormant_node_info(); dormant_node_info* info = new dormant_node_info();
strcpy(info->name, node_info[i].name); strcpy(info->name, node_info[i].name);
info->flavor_id = node_info[i].flavor_id; info->flavor_id = node_info[i].flavor_id;
info->addon = node_info[i].addon; info->addon = node_info[i].addon;
@@ -130,10 +131,10 @@ MediaWindow::FindNodes(media_type type, uint64 kind, BList &list)
MediaListItem * MediaListItem *
MediaWindow::FindMediaListItem(dormant_node_info *info) MediaWindow::FindMediaListItem(dormant_node_info* info)
{ {
for (int32 j = 0; j<fListView->CountItems(); j++) { for (int32 j = 0; j<fListView->CountItems(); j++) {
MediaListItem *item MediaListItem* item
= static_cast<MediaListItem *>(fListView->ItemAt(j)); = static_cast<MediaListItem *>(fListView->ItemAt(j));
if (item->fInfo && item->fInfo->addon == info->addon if (item->fInfo && item->fInfo->addon == info->addon
&& item->fInfo->flavor_id == info->flavor_id) { && item->fInfo->flavor_id == info->flavor_id) {
@@ -149,21 +150,20 @@ void
MediaWindow::AddNodes(BList &list, bool isVideo) MediaWindow::AddNodes(BList &list, bool isVideo)
{ {
for (int32 i = 0; i<list.CountItems(); i++) { for (int32 i = 0; i<list.CountItems(); i++) {
dormant_node_info *info dormant_node_info* info
= static_cast<dormant_node_info *>(list.ItemAt(i)); = static_cast<dormant_node_info*>(list.ItemAt(i));
if (!FindMediaListItem(info)) if (!FindMediaListItem(info))
fListView->AddItem(new MediaListItem(info, 1, isVideo, &fIcons)); fListView->AddItem(new MediaListItem(info, 1, isVideo, &fIcons));
} }
} }
// MediaWindow::InitWindow -- Initialization Commands here
void void
MediaWindow::InitWindow(void) MediaWindow::InitWindow(void)
{ {
// Bitmaps // Bitmaps
BRect iconRect(0, 0, 15, 15); BRect iconRect(0, 0, 15, 15);
BBitmap *icon = new BBitmap(iconRect, B_CMAP8); BBitmap* icon = new BBitmap(iconRect, B_CMAP8);
icon->SetBits(kDevicesBits, kDevicesWidth * kDevicesHeight, 0, icon->SetBits(kDevicesBits, kDevicesWidth * kDevicesHeight, 0,
kDevicesColorSpace); kDevicesColorSpace);
fIcons.AddItem(icon); fIcons.AddItem(icon);
@@ -191,7 +191,7 @@ MediaWindow::InitWindow(void)
fListView->SetSelectionMessage(new BMessage(ML_SELECTED_NODE)); fListView->SetSelectionMessage(new BMessage(ML_SELECTED_NODE));
// Add ScrollView to Media Menu // Add ScrollView to Media Menu
BScrollView *scrollView = new BScrollView("listscroller", BScrollView* scrollView = new BScrollView("listscroller",
fListView, 0, false, false, B_FANCY_BORDER); fListView, 0, false, false, B_FANCY_BORDER);
scrollView->SetExplicitMinSize(BSize(scrollWidth, B_SIZE_UNSET)); scrollView->SetExplicitMinSize(BSize(scrollWidth, B_SIZE_UNSET));
scrollView->SetExplicitMaxSize(BSize(scrollWidth, B_SIZE_UNSET)); scrollView->SetExplicitMaxSize(BSize(scrollWidth, B_SIZE_UNSET));
@@ -253,10 +253,10 @@ status_t
MediaWindow::InitMedia(bool first) MediaWindow::InitMedia(bool first)
{ {
status_t err = B_OK; status_t err = B_OK;
BMediaRoster *roster = BMediaRoster::Roster(&err); BMediaRoster* roster = BMediaRoster::Roster(&err);
if (first && err != B_OK) { if (first && err != B_OK) {
BAlert *alert = new BAlert("start_media_server", BAlert* alert = new BAlert("start_media_server",
B_TRANSLATE("Could not connect to the media server.\n" B_TRANSLATE("Could not connect to the media server.\n"
"Would you like to start it ?"), "Would you like to start it ?"),
B_TRANSLATE("Quit"), B_TRANSLATE("Quit"),
@@ -289,7 +289,7 @@ MediaWindow::InitMedia(bool first)
B_TRANSLATE("Ready for use" B_UTF8_ELLIPSIS)); B_TRANSLATE("Ready for use" B_UTF8_ELLIPSIS));
} }
void *listItem; void* listItem;
while ((listItem = fListView->RemoveItem((int32)0))) while ((listItem = fListView->RemoveItem((int32)0)))
delete static_cast<MediaListItem *>(listItem); delete static_cast<MediaListItem *>(listItem);
while ((listItem = fAudioOutputs.RemoveItem((int32)0))) while ((listItem = fAudioOutputs.RemoveItem((int32)0)))
@@ -301,8 +301,6 @@ MediaWindow::InitMedia(bool first)
while ((listItem = fVideoInputs.RemoveItem((int32)0))) while ((listItem = fVideoInputs.RemoveItem((int32)0)))
delete static_cast<dormant_node_info *>(listItem); delete static_cast<dormant_node_info *>(listItem);
MediaListItem *item, *mixer, *audio, *video;
// Grab Media Info // Grab Media Info
FindNodes(B_MEDIA_RAW_AUDIO, B_PHYSICAL_OUTPUT, fAudioOutputs); FindNodes(B_MEDIA_RAW_AUDIO, B_PHYSICAL_OUTPUT, fAudioOutputs);
FindNodes(B_MEDIA_RAW_AUDIO, B_PHYSICAL_INPUT, fAudioInputs); FindNodes(B_MEDIA_RAW_AUDIO, B_PHYSICAL_INPUT, fAudioInputs);
@@ -325,22 +323,31 @@ MediaWindow::InitMedia(bool first)
fVideoView->AddNodes(fVideoOutputs, false); fVideoView->AddNodes(fVideoOutputs, false);
fVideoView->AddNodes(fVideoInputs, true); fVideoView->AddNodes(fVideoInputs, true);
fListView->AddItem(audio = new MediaListItem(B_TRANSLATE("Audio settings"), 0, false, &fIcons)); // build our list view
fListView->AddItem(video = new MediaListItem(B_TRANSLATE("Video settings"), 0, true, &fIcons)); MediaListItem* audio = new MediaListItem(B_TRANSLATE("Audio settings"), 0,
false, &fIcons);
fListView->AddItem(audio);
fListView->AddItem(mixer = new MediaListItem(B_TRANSLATE("Audio mixer"), 1, false, &fIcons)); MediaListItem* video = new MediaListItem(B_TRANSLATE("Video settings"), 0,
true, &fIcons);
fListView->AddItem(video);
MediaListItem* mixer = new MediaListItem(B_TRANSLATE("Audio mixer"),
1, false, &fIcons);
fListView->AddItem(mixer);
mixer->SetAudioMixer(true); mixer->SetAudioMixer(true);
fListView->SortItems(&MediaListItem::Compare); fListView->SortItems(&MediaListItem::Compare);
// Set default nodes for our setting views
media_node default_node; media_node default_node;
dormant_node_info node_info; dormant_node_info node_info;
int32 outputID; int32 outputID;
BString outputName; BString outputName;
if (roster->GetAudioInput(&default_node)==B_OK) { if (roster->GetAudioInput(&default_node) == B_OK) {
roster->GetDormantNodeFor(default_node, &node_info); roster->GetDormantNodeFor(default_node, &node_info);
item = FindMediaListItem(&node_info); MediaListItem* item = FindMediaListItem(&node_info);
if (item) if (item)
item->SetDefault(true, true); item->SetDefault(true, true);
fAudioView->SetDefault(node_info, true); fAudioView->SetDefault(node_info, true);
@@ -348,7 +355,7 @@ MediaWindow::InitMedia(bool first)
if (roster->GetAudioOutput(&default_node, &outputID, &outputName)==B_OK) { if (roster->GetAudioOutput(&default_node, &outputID, &outputName)==B_OK) {
roster->GetDormantNodeFor(default_node, &node_info); roster->GetDormantNodeFor(default_node, &node_info);
item = FindMediaListItem(&node_info); MediaListItem* item = FindMediaListItem(&node_info);
if (item) if (item)
item->SetDefault(true, false); item->SetDefault(true, false);
fAudioView->SetDefault(node_info, false, outputID); fAudioView->SetDefault(node_info, false, outputID);
@@ -356,7 +363,7 @@ MediaWindow::InitMedia(bool first)
if (roster->GetVideoInput(&default_node)==B_OK) { if (roster->GetVideoInput(&default_node)==B_OK) {
roster->GetDormantNodeFor(default_node, &node_info); roster->GetDormantNodeFor(default_node, &node_info);
item = FindMediaListItem(&node_info); MediaListItem* item = FindMediaListItem(&node_info);
if (item) if (item)
item->SetDefault(true, true); item->SetDefault(true, true);
fVideoView->SetDefault(node_info, true); fVideoView->SetDefault(node_info, true);
@@ -364,7 +371,7 @@ MediaWindow::InitMedia(bool first)
if (roster->GetVideoOutput(&default_node)==B_OK) { if (roster->GetVideoOutput(&default_node)==B_OK) {
roster->GetDormantNodeFor(default_node, &node_info); roster->GetDormantNodeFor(default_node, &node_info);
item = FindMediaListItem(&node_info); MediaListItem* item = FindMediaListItem(&node_info);
if (item) if (item)
item->SetDefault(true, false); item->SetDefault(true, false);
fVideoView->SetDefault(node_info, false); fVideoView->SetDefault(node_info, false);
@@ -396,22 +403,19 @@ MediaWindow::InitMedia(bool first)
} }
// MediaWindow::QuitRequested -- Post a message to the app to quit
bool bool
MediaWindow::QuitRequested() MediaWindow::QuitRequested()
{ {
// stop watching the MediaRoster // stop watching the MediaRoster
BMediaRoster *roster = BMediaRoster::CurrentRoster(); BMediaRoster* roster = BMediaRoster::CurrentRoster();
if (roster && fCurrentNode) { if (roster && fCurrentNode) {
roster->StopWatching(this, *fCurrentNode, B_MEDIA_WILDCARD); roster->StopWatching(this, *fCurrentNode, B_MEDIA_WILDCARD);
} }
be_app->PostMessage(B_QUIT_REQUESTED); be_app->PostMessage(B_QUIT_REQUESTED);
return true; return true;
} }
// ---------------------------------------------------------------------------------------------------------- //
// MediaWindow::FrameResized -- When the main frame is resized fix up the other views
void void
MediaWindow::FrameResized (float width, float height) MediaWindow::FrameResized (float width, float height)
{ {
@@ -419,23 +423,21 @@ MediaWindow::FrameResized (float width, float height)
BRect r; BRect r;
r = Bounds(); r = Bounds();
} }
// ---------------------------------------------------------------------------------------------------------- //
// ErrorAlert -- Displays a BAlert Box with a Custom Error or Debug Message // ErrorAlert -- Displays a BAlert Box with a Custom Error or Debug Message
void void
ErrorAlert(char* errorMessage) { ErrorAlert(char* errorMessage) {
printf("%s\n", errorMessage); printf("%s\n", errorMessage);
BAlert *alert = new BAlert("BAlert", errorMessage, B_TRANSLATE("OK"), BAlert* alert = new BAlert("BAlert", errorMessage, B_TRANSLATE("OK"),
NULL, NULL, B_WIDTH_AS_USUAL, B_STOP_ALERT); NULL, NULL, B_WIDTH_AS_USUAL, B_STOP_ALERT);
alert->Go(); alert->Go();
exit(1); exit(1);
} }
// ---------------------------------------------------------------------------------------------------------- //
// MediaWindow::MessageReceived -- receives messages
void void
MediaWindow::MessageReceived (BMessage *message) MediaWindow::MessageReceived(BMessage* message)
{ {
switch(message->what) switch(message->what)
{ {
@@ -447,10 +449,11 @@ MediaWindow::MessageReceived (BMessage *message)
int32 index; int32 index;
if (message->FindInt32("index", &index)!=B_OK) if (message->FindInt32("index", &index)!=B_OK)
break; break;
Settings2Item *item = static_cast<Settings2Item *>(fAudioView->fMenu3->ItemAt(index)); Settings2Item* item = static_cast<Settings2Item*>(
fAudioView->fMenu3->ItemAt(index));
if (item) { if (item) {
BMediaRoster *roster = BMediaRoster::Roster(); BMediaRoster* roster = BMediaRoster::Roster();
roster->SetAudioOutput(*item->fInput); roster->SetAudioOutput(*item->fInput);
if (fAudioView->fRestartView->IsHidden()) if (fAudioView->fRestartView->IsHidden())
@@ -470,13 +473,15 @@ MediaWindow::MessageReceived (BMessage *message)
int32 index; int32 index;
if (message->FindInt32("index", &index)!=B_OK) if (message->FindInt32("index", &index)!=B_OK)
break; break;
SettingsView *settingsView = isVideo ? fVideoView : fAudioView; SettingsView* settingsView = isVideo ? fVideoView : fAudioView;
BMenu *menu = isInput ? settingsView->fMenu1 : settingsView->fMenu2; BMenu* menu = isInput ? settingsView->fMenu1
SettingsItem *item = static_cast<SettingsItem *>(menu->ItemAt(index)); : settingsView->fMenu2;
SettingsItem* item = static_cast<SettingsItem*>(
menu->ItemAt(index));
if (item) { if (item) {
PRINT(("isVideo %i isInput %i\n", isVideo, isInput)); PRINT(("isVideo %i isInput %i\n", isVideo, isInput));
BMediaRoster *roster = BMediaRoster::Roster(); BMediaRoster* roster = BMediaRoster::Roster();
if (isVideo) { if (isVideo) {
if (isInput) if (isInput)
roster->SetVideoInput(*item->fInfo); roster->SetVideoInput(*item->fInfo);
@@ -491,10 +496,12 @@ MediaWindow::MessageReceived (BMessage *message)
} }
} }
MediaListItem *oldListItem = NULL; MediaListItem* oldListItem = NULL;
for (int32 j = 0; j<fListView->CountItems(); j++) { for (int32 j = 0; j < fListView->CountItems(); j++) {
oldListItem = static_cast<MediaListItem *>(fListView->ItemAt(j)); oldListItem = static_cast<MediaListItem*>(
if (oldListItem->fInfo && oldListItem->IsVideo() == isVideo fListView->ItemAt(j));
if (oldListItem->fInfo
&& oldListItem->IsVideo() == isVideo
&& oldListItem->IsDefault(isInput)) && oldListItem->IsDefault(isInput))
break; break;
} }
@@ -503,7 +510,7 @@ MediaWindow::MessageReceived (BMessage *message)
else else
fprintf(stderr, "oldListItem not found\n"); fprintf(stderr, "oldListItem not found\n");
MediaListItem *listItem = FindMediaListItem(item->fInfo); MediaListItem* listItem = FindMediaListItem(item->fInfo);
if (listItem) { if (listItem) {
listItem->SetDefault(true, isInput); listItem->SetDefault(true, isInput);
} else } else
@@ -557,12 +564,13 @@ MediaWindow::MessageReceived (BMessage *message)
bool isVideo = true; bool isVideo = true;
if (message->FindBool("isVideo", &isVideo)!=B_OK) if (message->FindBool("isVideo", &isVideo)!=B_OK)
break; break;
SettingsView *settingsView = isVideo ? fVideoView : fAudioView; SettingsView* settingsView = isVideo ? fVideoView : fAudioView;
uint32 flags; uint32 flags;
uint32 realtimeFlag = isVideo ? B_MEDIA_REALTIME_VIDEO : B_MEDIA_REALTIME_AUDIO; uint32 realtimeFlag = isVideo
BMediaRoster *roster = BMediaRoster::Roster(); ? B_MEDIA_REALTIME_VIDEO : B_MEDIA_REALTIME_AUDIO;
BMediaRoster* roster = BMediaRoster::Roster();
roster->GetRealtimeFlags(&flags); roster->GetRealtimeFlags(&flags);
if (settingsView->fRealtimeCheckBox->Value()==B_CONTROL_ON) if (settingsView->fRealtimeCheckBox->Value() == B_CONTROL_ON)
flags |= realtimeFlag; flags |= realtimeFlag;
else else
flags &= ~realtimeFlag; flags &= ~realtimeFlag;
@@ -574,7 +582,8 @@ MediaWindow::MessageReceived (BMessage *message)
{ {
PRINT_OBJECT(*message); PRINT_OBJECT(*message);
MediaListItem *item = static_cast<MediaListItem *>(fListView->ItemAt(fListView->CurrentSelection())); MediaListItem* item = static_cast<MediaListItem*>(
fListView->ItemAt(fListView->CurrentSelection()));
if (!item) if (!item)
break; break;
BMediaRoster* roster = BMediaRoster::Roster(); BMediaRoster* roster = BMediaRoster::Roster();
@@ -584,7 +593,7 @@ MediaWindow::MessageReceived (BMessage *message)
roster->ReleaseNode(*fCurrentNode); roster->ReleaseNode(*fCurrentNode);
} }
fCurrentNode = NULL; fCurrentNode = NULL;
BView *paramView = fContentView->ChildAt(0); BView* paramView = fContentView->ChildAt(0);
if (paramView!=NULL) { if (paramView!=NULL) {
fContentView->RemoveChild(paramView); fContentView->RemoveChild(paramView);
} }
@@ -619,9 +628,9 @@ MediaWindow::MessageReceived (BMessage *message)
roster->StartWatching(this, *fCurrentNode, B_MEDIA_WILDCARD); roster->StartWatching(this, *fCurrentNode, B_MEDIA_WILDCARD);
} else { } else {
if (fParamWeb) delete fParamWeb;
delete fParamWeb;
fParamWeb = NULL; fParamWeb = NULL;
BRect bounds = fContentView->Bounds(); BRect bounds = fContentView->Bounds();
BStringView* stringView = new BStringView(bounds, BStringView* stringView = new BStringView(bounds,
"noControls", B_TRANSLATE("This hardware has no controls."), "noControls", B_TRANSLATE("This hardware has no controls."),
@@ -633,7 +642,8 @@ MediaWindow::MessageReceived (BMessage *message)
} }
} }
bool barChanged = (item->OutlineLevel() == 0 || fParamWeb == NULL || fParamWeb->CountGroups()<2); bool barChanged = (item->OutlineLevel() == 0
|| fParamWeb == NULL || fParamWeb->CountGroups()<2);
if (barChanged != fBar->fDisplay) { if (barChanged != fBar->fDisplay) {
fBar->fDisplay = barChanged; fBar->fDisplay = barChanged;
fBar->Invalidate(); fBar->Invalidate();
@@ -643,10 +653,13 @@ MediaWindow::MessageReceived (BMessage *message)
case B_SOME_APP_LAUNCHED: case B_SOME_APP_LAUNCHED:
{ {
PRINT_OBJECT(*message); PRINT_OBJECT(*message);
const char *mimeSig; if (!fAlert)
if (fAlert && message->FindString("be:signature", &mimeSig)==B_OK break;
&& (strcmp(mimeSig, "application/x-vnd.Be.addon-host")==0
|| strcmp(mimeSig, "application/x-vnd.Be.media-server")==0)) { BString mimeSig;
if (message->FindString("be:signature", &mimeSig) == B_OK
&& (mimeSig == "application/x-vnd.Be.addon-host"
|| mimeSig == "application/x-vnd.Be.media-server")) {
fAlert->Lock(); fAlert->Lock();
fAlert->TextView()->SetText( fAlert->TextView()->SetText(
B_TRANSLATE("Starting media server" B_UTF8_ELLIPSIS)); B_TRANSLATE("Starting media server" B_UTF8_ELLIPSIS));
@@ -657,12 +670,12 @@ MediaWindow::MessageReceived (BMessage *message)
case B_SOME_APP_QUIT: case B_SOME_APP_QUIT:
{ {
PRINT_OBJECT(*message); PRINT_OBJECT(*message);
const char *mimeSig; BString mimeSig;
if (message->FindString("be:signature", &mimeSig)==B_OK) { if (message->FindString("be:signature", &mimeSig) == B_OK) {
if (strcmp(mimeSig, "application/x-vnd.Be.addon-host")==0 if (mimeSig == "application/x-vnd.Be.addon-host"
|| strcmp(mimeSig, "application/x-vnd.Be.media-server")==0) { || mimeSig == "application/x-vnd.Be.media-server") {
BMediaRoster* roster = BMediaRoster::CurrentRoster(); BMediaRoster* roster = BMediaRoster::CurrentRoster();
if (roster&&roster->Lock()) if (roster && roster->Lock())
roster->Quit(); roster->Quit();
} }
} }
@@ -676,16 +689,17 @@ MediaWindow::MessageReceived (BMessage *message)
} }
status_t status_t
MediaWindow::RestartMediaServices(void *data) MediaWindow::RestartMediaServices(void* data)
{ {
MediaWindow *window = (MediaWindow *)data; MediaWindow* window = (MediaWindow*)data;
window->fAlert = new MediaAlert(BRect(0, 0, 300, 60), window->fAlert = new MediaAlert(BRect(0, 0, 300, 60),
"restart_alert", B_TRANSLATE( "restart_alert", B_TRANSLATE(
"Restarting media services\nShutting down media server\n")); "Restarting media services\nShutting down media server\n"));
window->fAlert->Show(); window->fAlert->Show();
shutdown_media_server(B_INFINITE_TIMEOUT, MediaWindow::UpdateProgress, window->fAlert); shutdown_media_server(B_INFINITE_TIMEOUT, MediaWindow::UpdateProgress,
window->fAlert);
{ {
BAutolock locker(window->fAlert); BAutolock locker(window->fAlert);
@@ -698,12 +712,13 @@ MediaWindow::RestartMediaServices(void *data)
return window->PostMessage(ML_INIT_MEDIA); return window->PostMessage(ML_INIT_MEDIA);
} }
bool bool
MediaWindow::UpdateProgress(int stage, const char * message, void * cookie) MediaWindow::UpdateProgress(int stage, const char * message, void * cookie)
{ {
MediaAlert *alert = static_cast<MediaAlert*>(cookie); MediaAlert* alert = static_cast<MediaAlert*>(cookie);
PRINT(("stage : %i\n", stage)); PRINT(("stage : %i\n", stage));
const char *string = "Unknown stage"; const char* string = "Unknown stage";
switch (stage) { switch (stage) {
case 10: case 10:
string = B_TRANSLATE("Stopping media server" B_UTF8_ELLIPSIS); string = B_TRANSLATE("Stopping media server" B_UTF8_ELLIPSIS);
+43 -35
View File
@@ -27,45 +27,53 @@
#include "MediaListItem.h" #include "MediaListItem.h"
#include "MediaAlert.h" #include "MediaAlert.h"
#define SETTINGS_FILE "MediaPrefs Settings" #define SETTINGS_FILE "MediaPrefs Settings"
class MediaWindow : public BWindow class MediaWindow : public BWindow
{ {
public: public:
MediaWindow(BRect frame); MediaWindow(BRect frame);
~MediaWindow(); ~MediaWindow();
virtual bool QuitRequested(); virtual bool QuitRequested();
virtual void MessageReceived(BMessage *message); virtual void MessageReceived(BMessage* message);
virtual void FrameResized(float width, float height); virtual void FrameResized(float width, float height);
status_t InitCheck(); status_t InitCheck();
private:
status_t InitMedia(bool first); private:
void FindNodes(media_type type, uint64 kind, BList &list);
void AddNodes(BList &list, bool isVideo); status_t InitMedia(bool first);
MediaListItem *FindMediaListItem(dormant_node_info *info); void FindNodes(media_type type, uint64 kind,
void InitWindow(void); BList &list);
static status_t RestartMediaServices(void *data); void AddNodes(BList &list, bool isVideo);
static bool UpdateProgress(int stage, const char * message, void * cookie);
MediaListItem* FindMediaListItem(dormant_node_info* info);
BBox * fBox; void InitWindow();
BListView* fListView;
BStringView* fTitleView; static status_t RestartMediaServices(void* data);
BView* fContentView; static bool UpdateProgress(int stage, const char * message,
SettingsView* fAudioView; void * cookie);
SettingsView* fVideoView;
BarView* fBar; BBox* fBox;
BListView* fListView;
media_node* fCurrentNode; BStringView* fTitleView;
BParameterWeb* fParamWeb; BView* fContentView;
SettingsView* fAudioView;
BList fAudioInputs; SettingsView* fVideoView;
BList fAudioOutputs; BarView* fBar;
BList fVideoInputs;
BList fVideoOutputs; media_node* fCurrentNode;
BParameterWeb* fParamWeb;
BList fIcons;
MediaAlert *fAlert; BList fAudioInputs;
status_t fInitCheck; BList fAudioOutputs;
BList fVideoInputs;
BList fVideoOutputs;
BList fIcons;
MediaAlert* fAlert;
status_t fInitCheck;
}; };
#endif #endif