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