[haiku-commits] r39190 - haiku/trunk/src/preferences/media

  • From: yourpalal2@xxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Sat, 30 Oct 2010 06:20:58 +0200 (CEST)

Author: yourpalal
Date: 2010-10-30 06:20:58 +0200 (Sat, 30 Oct 2010)
New Revision: 39190
Changeset: http://dev.haiku-os.org/changeset/39190

Modified:
   haiku/trunk/src/preferences/media/MediaViews.cpp
   haiku/trunk/src/preferences/media/MediaViews.h
   haiku/trunk/src/preferences/media/MediaWindow.cpp
Log:
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.


Modified: haiku/trunk/src/preferences/media/MediaViews.cpp
===================================================================
--- haiku/trunk/src/preferences/media/MediaViews.cpp    2010-10-30 01:33:50 UTC 
(rev 39189)
+++ haiku/trunk/src/preferences/media/MediaViews.cpp    2010-10-30 04:20:58 UTC 
(rev 39190)
@@ -21,6 +21,7 @@
 #include <Catalog.h>
 #include <Deskbar.h>
 #include <Entry.h>
+#include <GridView.h>
 #include <GroupView.h>
 #include <Locale.h>
 #include <MediaAddOn.h>
@@ -45,49 +46,64 @@
 {
        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");
        defaultsBox->SetLabel(fIsVideo ? B_TRANSLATE("Default nodes")
                : B_TRANSLATE("Defaults"));
 
-       // create the default box
-       BGroupLayout* defaultBoxLayout = new BGroupLayout(B_VERTICAL, 5);
-       defaultBoxLayout->SetInsets(10,10,10,10);
-       defaultsBox->SetLayout(defaultBoxLayout);
-       defaultBoxLayout->AddItem(BSpaceLayoutItem::CreateVerticalStrut(5));
+       // put our menus in a BGridView in our BBox, this way, the BBox makes 
sure
+       // we have are not blocking the label.
+       BGridView* defaultsGridView = new BGridView();
+       defaultsBox->AddChild(defaultsGridView);
 
-       BGroupView* inputField = new BGroupView(B_HORIZONTAL);
-       BGroupView* outputField = new BGroupView(B_HORIZONTAL);
-       defaultsBox->GetLayout()->AddView(inputField);
-       defaultsBox->GetLayout()->AddView(outputField);
+       BGridLayout* defaultsGrid = defaultsGridView->GridLayout();
+       defaultsGrid->SetInsets(B_USE_DEFAULT_SPACING, 0, B_USE_DEFAULT_SPACING,
+               B_USE_DEFAULT_SPACING);
 
-       float divider = StringWidth(fIsVideo ? B_TRANSLATE("Video output:")
-               : B_TRANSLATE("Audio output:")) + 5;
-       fMenu1 = new BPopUpMenu(B_TRANSLATE("<none>"));
-       fMenu1->SetLabelFromMarked(true);
-       BMenuField* menuField1 = new BMenuField("menuField1",
-               fIsVideo ? B_TRANSLATE("Video input:")
-                       : B_TRANSLATE("Audio input:"), fMenu1, NULL);
-       menuField1->SetDivider(divider);
+       BLayoutItem* labelItem = inputMenuField->CreateLabelLayoutItem();
+       BLayoutItem* menuItem = inputMenuField->CreateMenuBarLayoutItem();
+       defaultsGrid->AddItem(labelItem, 0, 0, 1, 1);
+       defaultsGrid->AddItem(menuItem, 1, 0, 3, 1);
 
-       fMenu2 = new BPopUpMenu(B_TRANSLATE("<none>"));
-       fMenu2->SetLabelFromMarked(true);
-       BMenuField* menuField2 = new BMenuField("menuField2",
-               fIsVideo ? B_TRANSLATE("Video output:")
-                       : B_TRANSLATE("Audio output:"), fMenu2, NULL);
-       menuField2->SetDivider(divider);
+       int32 outputMenuWidth = 3;
+       if (channelMenuField) {
+               outputMenuWidth = 1;
+               labelItem = channelMenuField->CreateLabelLayoutItem();
+               menuItem = channelMenuField->CreateMenuBarLayoutItem();
+               defaultsGrid->AddItem(labelItem, 2, 1, 1, 1);
+               defaultsGrid->AddItem(menuItem, 3, 1, 1, 1);
+       }
 
-       inputField->GroupLayout()->AddView(menuField1);
-       outputField->GroupLayout()->AddView(menuField2);
+       labelItem = outputMenuField->CreateLabelLayoutItem();
+       menuItem = outputMenuField->CreateMenuBarLayoutItem();
+       defaultsGrid->AddItem(labelItem, 0, 1, 1, 1);
+       defaultsGrid->AddItem(menuItem, 1, 1, outputMenuWidth, 1);
 
-       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);
-       }
 
        rgb_color red_color = {222, 32, 33};
        fRestartView = new BStringView("restartStringView",
@@ -136,7 +152,7 @@
        realtimeBoxLayout->AddView(fRealtimeCheckBox);
        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);
        BButton* restartButton = new BButton("restartButton",
                B_TRANSLATE("Restart media services"),
@@ -168,11 +184,11 @@
 void
 SettingsView::AddNodes(NodeList& list, bool isInput)
 {
-       BMenu* menu = isInput ? fMenu1 : fMenu2;
-       void* item;
-       while ((item = menu->RemoveItem((int32)0)) != NULL)
-               delete static_cast<dormant_node_info*>(item);
+       BMenu* menu = isInput ? fInputMenu : fOutputMenu;
 
+       for (BMenuItem* item; (item = menu->RemoveItem((int32)0)) != NULL;)
+               delete item;
+
        BMessage message(ML_DEFAULT_CHANGE);
        message.AddBool("isVideo", fIsVideo);
        message.AddBool("isInput", isInput);
@@ -187,7 +203,7 @@
 void
 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++) {
                SettingsItem* item = 
static_cast<SettingsItem*>(menu->ItemAt(i));
@@ -200,7 +216,7 @@
 
        if (!fIsVideo && !isInput && outputID >= 0) {
                BMenuItem* item;
-               while ((item = fMenu3->RemoveItem((int32)0)) != NULL)
+               while ((item = fChannelMenu->RemoveItem((int32)0)) != NULL)
                        delete item;
 
                BMediaRoster* roster = BMediaRoster::Roster();
@@ -226,7 +242,7 @@
                                        memcpy(input, &inputs[i], 
sizeof(*input));
                                        item = new Settings2Item(&info, input,
                                                new BMessage(message));
-                                       fMenu3->AddItem(item);
+                                       fChannelMenu->AddItem(item);
                                        if (inputs[i].destination.id == 
outputID)
                                                item->SetMarked(true);
                                }

Modified: haiku/trunk/src/preferences/media/MediaViews.h
===================================================================
--- haiku/trunk/src/preferences/media/MediaViews.h      2010-10-30 01:33:50 UTC 
(rev 39189)
+++ haiku/trunk/src/preferences/media/MediaViews.h      2010-10-30 04:20:58 UTC 
(rev 39190)
@@ -69,12 +69,10 @@
                        BCheckBox*                      fRealtimeCheckBox;
                        BCheckBox*                      fVolumeCheckBox;
 
-                       BMenu*                          fMenu1;
-                               // input menu
-                       BMenu*                          fMenu2;
-                               // output menu
-                       BMenu*                          fMenu3;
-                               // channel menu (audio only)
+                       BMenu*                          fInputMenu;
+                       BMenu*                          fOutputMenu;
+                       BMenu*                          fChannelMenu;
+                               // (audio only)
                        BStringView*            fRestartView;
 
 private:

Modified: haiku/trunk/src/preferences/media/MediaWindow.cpp
===================================================================
--- haiku/trunk/src/preferences/media/MediaWindow.cpp   2010-10-30 01:33:50 UTC 
(rev 39189)
+++ haiku/trunk/src/preferences/media/MediaWindow.cpp   2010-10-30 04:20:58 UTC 
(rev 39190)
@@ -114,20 +114,24 @@
 {
        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* nodeInputFormat = NULL, *nodeOutputFormat = NULL;
        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)
-               format1 = &format;
+               nodeInputFormat = &format;
        else if (kind & B_PHYSICAL_INPUT)
-               format2 = &format;
+               nodeOutputFormat = &format;
        else
                return;
 
-       if (roster->GetDormantNodes(node_info, &node_info_count, format1, 
format2,
-                       NULL, kind)!=B_OK) {
+       BMediaRoster* roster = BMediaRoster::Roster();
+
+       if (roster->GetDormantNodes(node_info, &node_info_count, 
nodeInputFormat,
+               nodeOutputFormat, NULL, kind) != B_OK) {
                // TODO: better error reporting!
                fprintf(stderr, "error\n");
                return;
@@ -430,7 +434,7 @@
                                if (message->FindInt32("index", &index)!=B_OK)
                                        break;
                                Settings2Item* item = 
static_cast<Settings2Item*>(
-                                       fAudioView->fMenu3->ItemAt(index));
+                                       
fAudioView->fChannelMenu->ItemAt(index));
 
                                if (item) {
                                        BMediaRoster* roster = 
BMediaRoster::Roster();
@@ -454,8 +458,8 @@
                                if (message->FindInt32("index", &index)!=B_OK)
                                        break;
                                SettingsView* settingsView = isVideo ? 
fVideoView : fAudioView;
-                               BMenu* menu = isInput ? settingsView->fMenu1
-                                       : settingsView->fMenu2;
+                               BMenu* menu = isInput ? settingsView->fInputMenu
+                                       : settingsView->fOutputMenu;
                                SettingsItem* item = static_cast<SettingsItem*>(
                                        menu->ItemAt(index));
 
@@ -542,7 +546,7 @@
                case ML_ENABLE_REAL_TIME:
                        {
                                bool isVideo = true;
-                               if (message->FindBool("isVideo", 
&isVideo)!=B_OK)
+                               if (message->FindBool("isVideo", &isVideo) != 
B_OK)
                                        break;
                                SettingsView* settingsView = isVideo ? 
fVideoView : fAudioView;
                                uint32 flags;


Other related posts:

  • » [haiku-commits] r39190 - haiku/trunk/src/preferences/media - yourpalal2