In Media preflet:
* rename some variables (eg. fMenu1 -> fInputMenu) * rearrange some code for improved clarity * fix an instance of casting BMenuItem*s to dormant_node_info*s before deleting them (now we just delete them as BMenuItems) * use a BGridView to align the MenuFields in Audio/Video setting views. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39190 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -21,6 +21,7 @@
|
|||||||
#include <Catalog.h>
|
#include <Catalog.h>
|
||||||
#include <Deskbar.h>
|
#include <Deskbar.h>
|
||||||
#include <Entry.h>
|
#include <Entry.h>
|
||||||
|
#include <GridView.h>
|
||||||
#include <GroupView.h>
|
#include <GroupView.h>
|
||||||
#include <Locale.h>
|
#include <Locale.h>
|
||||||
#include <MediaAddOn.h>
|
#include <MediaAddOn.h>
|
||||||
@@ -45,50 +46,65 @@ SettingsView::SettingsView (bool isVideo)
|
|||||||
{
|
{
|
||||||
SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));
|
SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));
|
||||||
|
|
||||||
|
// create the default box
|
||||||
|
|
||||||
|
// input menu
|
||||||
|
fInputMenu = new BPopUpMenu(B_TRANSLATE("<none>"));
|
||||||
|
fInputMenu->SetLabelFromMarked(true);
|
||||||
|
BMenuField* inputMenuField = new BMenuField("inputMenuField",
|
||||||
|
fIsVideo ? B_TRANSLATE("Video input:")
|
||||||
|
: B_TRANSLATE("Audio input:"), fInputMenu, NULL);
|
||||||
|
|
||||||
|
// output menu
|
||||||
|
fOutputMenu = new BPopUpMenu(B_TRANSLATE("<none>"));
|
||||||
|
fOutputMenu->SetLabelFromMarked(true);
|
||||||
|
BMenuField* outputMenuField = new BMenuField("outputMenuField",
|
||||||
|
fIsVideo ? B_TRANSLATE("Video output:")
|
||||||
|
: B_TRANSLATE("Audio output:"), fOutputMenu, NULL);
|
||||||
|
|
||||||
|
// channel menu (audio only)
|
||||||
|
BMenuField* channelMenuField = NULL;
|
||||||
|
if (!fIsVideo) {
|
||||||
|
fChannelMenu = new BPopUpMenu(B_TRANSLATE("<none>"));
|
||||||
|
fChannelMenu->SetLabelFromMarked(true);
|
||||||
|
channelMenuField = new BMenuField("channelMenuField",
|
||||||
|
B_TRANSLATE("Channel:"), fChannelMenu, NULL);
|
||||||
|
channelMenuField->SetDivider(StringWidth(B_TRANSLATE("Channel:"))+5);
|
||||||
|
}
|
||||||
|
|
||||||
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"));
|
||||||
|
|
||||||
// create the default box
|
// put our menus in a BGridView in our BBox, this way, the BBox makes sure
|
||||||
BGroupLayout* defaultBoxLayout = new BGroupLayout(B_VERTICAL, 5);
|
// we have are not blocking the label.
|
||||||
defaultBoxLayout->SetInsets(10,10,10,10);
|
BGridView* defaultsGridView = new BGridView();
|
||||||
defaultsBox->SetLayout(defaultBoxLayout);
|
defaultsBox->AddChild(defaultsGridView);
|
||||||
defaultBoxLayout->AddItem(BSpaceLayoutItem::CreateVerticalStrut(5));
|
|
||||||
|
|
||||||
BGroupView* inputField = new BGroupView(B_HORIZONTAL);
|
BGridLayout* defaultsGrid = defaultsGridView->GridLayout();
|
||||||
BGroupView* outputField = new BGroupView(B_HORIZONTAL);
|
defaultsGrid->SetInsets(B_USE_DEFAULT_SPACING, 0, B_USE_DEFAULT_SPACING,
|
||||||
defaultsBox->GetLayout()->AddView(inputField);
|
B_USE_DEFAULT_SPACING);
|
||||||
defaultsBox->GetLayout()->AddView(outputField);
|
|
||||||
|
|
||||||
float divider = StringWidth(fIsVideo ? B_TRANSLATE("Video output:")
|
BLayoutItem* labelItem = inputMenuField->CreateLabelLayoutItem();
|
||||||
: B_TRANSLATE("Audio output:")) + 5;
|
BLayoutItem* menuItem = inputMenuField->CreateMenuBarLayoutItem();
|
||||||
fMenu1 = new BPopUpMenu(B_TRANSLATE("<none>"));
|
defaultsGrid->AddItem(labelItem, 0, 0, 1, 1);
|
||||||
fMenu1->SetLabelFromMarked(true);
|
defaultsGrid->AddItem(menuItem, 1, 0, 3, 1);
|
||||||
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>"));
|
int32 outputMenuWidth = 3;
|
||||||
fMenu2->SetLabelFromMarked(true);
|
if (channelMenuField) {
|
||||||
BMenuField* menuField2 = new BMenuField("menuField2",
|
outputMenuWidth = 1;
|
||||||
fIsVideo ? B_TRANSLATE("Video output:")
|
labelItem = channelMenuField->CreateLabelLayoutItem();
|
||||||
: B_TRANSLATE("Audio output:"), fMenu2, NULL);
|
menuItem = channelMenuField->CreateMenuBarLayoutItem();
|
||||||
menuField2->SetDivider(divider);
|
defaultsGrid->AddItem(labelItem, 2, 1, 1, 1);
|
||||||
|
defaultsGrid->AddItem(menuItem, 3, 1, 1, 1);
|
||||||
inputField->GroupLayout()->AddView(menuField1);
|
|
||||||
outputField->GroupLayout()->AddView(menuField2);
|
|
||||||
|
|
||||||
BMenuField* menuField3 = NULL;
|
|
||||||
if (!fIsVideo) {
|
|
||||||
fMenu3 = new BPopUpMenu(B_TRANSLATE("<none>"));
|
|
||||||
fMenu3->SetLabelFromMarked(true);
|
|
||||||
menuField3 = new BMenuField("menuField3",
|
|
||||||
B_TRANSLATE("Channel:"), fMenu3, NULL);
|
|
||||||
outputField->GroupLayout()->AddView(menuField3);
|
|
||||||
menuField3->SetDivider(StringWidth(B_TRANSLATE("Channel:"))+5);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
labelItem = outputMenuField->CreateLabelLayoutItem();
|
||||||
|
menuItem = outputMenuField->CreateMenuBarLayoutItem();
|
||||||
|
defaultsGrid->AddItem(labelItem, 0, 1, 1, 1);
|
||||||
|
defaultsGrid->AddItem(menuItem, 1, 1, outputMenuWidth, 1);
|
||||||
|
|
||||||
|
|
||||||
rgb_color red_color = {222, 32, 33};
|
rgb_color red_color = {222, 32, 33};
|
||||||
fRestartView = new BStringView("restartStringView",
|
fRestartView = new BStringView("restartStringView",
|
||||||
B_TRANSLATE("Restart the media server to apply changes."));
|
B_TRANSLATE("Restart the media server to apply changes."));
|
||||||
@@ -136,7 +152,7 @@ SettingsView::SettingsView (bool isVideo)
|
|||||||
realtimeBoxLayout->AddView(fRealtimeCheckBox);
|
realtimeBoxLayout->AddView(fRealtimeCheckBox);
|
||||||
realtimeBoxLayout->AddView(textView);
|
realtimeBoxLayout->AddView(textView);
|
||||||
|
|
||||||
// create the bottom line: volumen in deskbar checkbox and restart button
|
// create the bottom line: volume 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"),
|
||||||
@@ -168,10 +184,10 @@ SettingsView::SettingsView (bool isVideo)
|
|||||||
void
|
void
|
||||||
SettingsView::AddNodes(NodeList& list, bool isInput)
|
SettingsView::AddNodes(NodeList& list, bool isInput)
|
||||||
{
|
{
|
||||||
BMenu* menu = isInput ? fMenu1 : fMenu2;
|
BMenu* menu = isInput ? fInputMenu : fOutputMenu;
|
||||||
void* item;
|
|
||||||
while ((item = menu->RemoveItem((int32)0)) != NULL)
|
for (BMenuItem* item; (item = menu->RemoveItem((int32)0)) != NULL;)
|
||||||
delete static_cast<dormant_node_info*>(item);
|
delete item;
|
||||||
|
|
||||||
BMessage message(ML_DEFAULT_CHANGE);
|
BMessage message(ML_DEFAULT_CHANGE);
|
||||||
message.AddBool("isVideo", fIsVideo);
|
message.AddBool("isVideo", fIsVideo);
|
||||||
@@ -187,7 +203,7 @@ SettingsView::AddNodes(NodeList& list, bool isInput)
|
|||||||
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 ? fInputMenu : fOutputMenu;
|
||||||
|
|
||||||
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));
|
||||||
@@ -200,7 +216,7 @@ SettingsView::SetDefault(dormant_node_info &info, bool isInput, int32 outputID)
|
|||||||
|
|
||||||
if (!fIsVideo && !isInput && outputID >= 0) {
|
if (!fIsVideo && !isInput && outputID >= 0) {
|
||||||
BMenuItem* item;
|
BMenuItem* item;
|
||||||
while ((item = fMenu3->RemoveItem((int32)0)) != NULL)
|
while ((item = fChannelMenu->RemoveItem((int32)0)) != NULL)
|
||||||
delete item;
|
delete item;
|
||||||
|
|
||||||
BMediaRoster* roster = BMediaRoster::Roster();
|
BMediaRoster* roster = BMediaRoster::Roster();
|
||||||
@@ -226,7 +242,7 @@ SettingsView::SetDefault(dormant_node_info &info, bool isInput, int32 outputID)
|
|||||||
memcpy(input, &inputs[i], sizeof(*input));
|
memcpy(input, &inputs[i], sizeof(*input));
|
||||||
item = new Settings2Item(&info, input,
|
item = new Settings2Item(&info, input,
|
||||||
new BMessage(message));
|
new BMessage(message));
|
||||||
fMenu3->AddItem(item);
|
fChannelMenu->AddItem(item);
|
||||||
if (inputs[i].destination.id == outputID)
|
if (inputs[i].destination.id == outputID)
|
||||||
item->SetMarked(true);
|
item->SetMarked(true);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -69,12 +69,10 @@ public:
|
|||||||
BCheckBox* fRealtimeCheckBox;
|
BCheckBox* fRealtimeCheckBox;
|
||||||
BCheckBox* fVolumeCheckBox;
|
BCheckBox* fVolumeCheckBox;
|
||||||
|
|
||||||
BMenu* fMenu1;
|
BMenu* fInputMenu;
|
||||||
// input menu
|
BMenu* fOutputMenu;
|
||||||
BMenu* fMenu2;
|
BMenu* fChannelMenu;
|
||||||
// output menu
|
// (audio only)
|
||||||
BMenu* fMenu3;
|
|
||||||
// channel menu (audio only)
|
|
||||||
BStringView* fRestartView;
|
BStringView* fRestartView;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|||||||
@@ -114,20 +114,24 @@ MediaWindow::_FindNodes(media_type type, uint64 kind, NodeList& into)
|
|||||||
{
|
{
|
||||||
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* nodeInputFormat = NULL, *nodeOutputFormat = NULL;
|
||||||
BMediaRoster* roster = BMediaRoster::Roster();
|
|
||||||
format.type = type;
|
format.type = type;
|
||||||
|
|
||||||
|
// output nodes must be BBufferConsumers => they have an input format
|
||||||
|
// input nodes must be BBufferProducers => they have an output format
|
||||||
if (kind & B_PHYSICAL_OUTPUT)
|
if (kind & B_PHYSICAL_OUTPUT)
|
||||||
format1 = &format;
|
nodeInputFormat = &format;
|
||||||
else if (kind & B_PHYSICAL_INPUT)
|
else if (kind & B_PHYSICAL_INPUT)
|
||||||
format2 = &format;
|
nodeOutputFormat = &format;
|
||||||
else
|
else
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (roster->GetDormantNodes(node_info, &node_info_count, format1, format2,
|
BMediaRoster* roster = BMediaRoster::Roster();
|
||||||
NULL, kind)!=B_OK) {
|
|
||||||
|
if (roster->GetDormantNodes(node_info, &node_info_count, nodeInputFormat,
|
||||||
|
nodeOutputFormat, NULL, kind) != B_OK) {
|
||||||
// TODO: better error reporting!
|
// TODO: better error reporting!
|
||||||
fprintf(stderr, "error\n");
|
fprintf(stderr, "error\n");
|
||||||
return;
|
return;
|
||||||
@@ -430,7 +434,7 @@ MediaWindow::MessageReceived(BMessage* message)
|
|||||||
if (message->FindInt32("index", &index)!=B_OK)
|
if (message->FindInt32("index", &index)!=B_OK)
|
||||||
break;
|
break;
|
||||||
Settings2Item* item = static_cast<Settings2Item*>(
|
Settings2Item* item = static_cast<Settings2Item*>(
|
||||||
fAudioView->fMenu3->ItemAt(index));
|
fAudioView->fChannelMenu->ItemAt(index));
|
||||||
|
|
||||||
if (item) {
|
if (item) {
|
||||||
BMediaRoster* roster = BMediaRoster::Roster();
|
BMediaRoster* roster = BMediaRoster::Roster();
|
||||||
@@ -454,8 +458,8 @@ MediaWindow::MessageReceived(BMessage* message)
|
|||||||
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
|
BMenu* menu = isInput ? settingsView->fInputMenu
|
||||||
: settingsView->fMenu2;
|
: settingsView->fOutputMenu;
|
||||||
SettingsItem* item = static_cast<SettingsItem*>(
|
SettingsItem* item = static_cast<SettingsItem*>(
|
||||||
menu->ItemAt(index));
|
menu->ItemAt(index));
|
||||||
|
|
||||||
@@ -542,7 +546,7 @@ MediaWindow::MessageReceived(BMessage* message)
|
|||||||
case ML_ENABLE_REAL_TIME:
|
case ML_ENABLE_REAL_TIME:
|
||||||
{
|
{
|
||||||
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;
|
||||||
|
|||||||
Reference in New Issue
Block a user