Author: yourpalal Date: 2010-10-23 17:26:45 +0200 (Sat, 23 Oct 2010) New Revision: 39070 Changeset: http://dev.haiku-os.org/changeset/39070 Modified: haiku/trunk/src/preferences/media/Jamfile haiku/trunk/src/preferences/media/MediaViews.cpp haiku/trunk/src/preferences/media/MediaViews.h haiku/trunk/src/preferences/media/MediaWindow.cpp haiku/trunk/src/preferences/media/MediaWindow.h Log: Update Media prefs to use BObjectList in place of BList + a few style fixes. Modified: haiku/trunk/src/preferences/media/Jamfile =================================================================== --- haiku/trunk/src/preferences/media/Jamfile 2010-10-23 15:19:58 UTC (rev 39069) +++ haiku/trunk/src/preferences/media/Jamfile 2010-10-23 15:26:45 UTC (rev 39070) @@ -7,7 +7,7 @@ } UseLibraryHeaders icon ; -UsePrivateHeaders media ; +UsePrivateHeaders media shared ; Preference Media : Media.cpp Modified: haiku/trunk/src/preferences/media/MediaViews.cpp =================================================================== --- haiku/trunk/src/preferences/media/MediaViews.cpp 2010-10-23 15:19:58 UTC (rev 39069) +++ haiku/trunk/src/preferences/media/MediaViews.cpp 2010-10-23 15:26:45 UTC (rev 39070) @@ -166,7 +166,7 @@ void -SettingsView::AddNodes(BList& list, bool isInput) +SettingsView::AddNodes(NodeList& list, bool isInput) { BMenu* menu = isInput ? fMenu1 : fMenu2; void* item; @@ -178,8 +178,7 @@ 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 = list.ItemAt(i); menu->AddItem(new SettingsItem(info, new BMessage(message))); } } Modified: haiku/trunk/src/preferences/media/MediaViews.h =================================================================== --- haiku/trunk/src/preferences/media/MediaViews.h 2010-10-23 15:19:58 UTC (rev 39069) +++ haiku/trunk/src/preferences/media/MediaViews.h 2010-10-23 15:26:45 UTC (rev 39070) @@ -12,8 +12,6 @@ // Created : June 25, 2003 // // ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ - - #ifndef __MEDIAVIEWS_H__ #define __MEDIAVIEWS_H__ #include <CheckBox.h> @@ -22,7 +20,9 @@ #include <StringView.h> #include <View.h> +#include <ObjectList.h> + const uint32 ML_RESTART_MEDIA_SERVER = 'resr'; const uint32 ML_SHOW_VOLUME_CONTROL = 'shvc'; const uint32 ML_ENABLE_REAL_TIME = 'enrt'; @@ -59,8 +59,10 @@ class SettingsView : public BView { public: + typedef BObjectList<dormant_node_info> NodeList; + SettingsView(bool isVideo); - void AddNodes(BList &list, bool isInput); + void AddNodes(NodeList &nodes, bool isInput); void SetDefault(dormant_node_info &info, bool isInput, int32 outputID = -1); Modified: haiku/trunk/src/preferences/media/MediaWindow.cpp =================================================================== --- haiku/trunk/src/preferences/media/MediaWindow.cpp 2010-10-23 15:19:58 UTC (rev 39069) +++ haiku/trunk/src/preferences/media/MediaWindow.cpp 2010-10-23 15:26:45 UTC (rev 39070) @@ -50,6 +50,10 @@ B_ASYNCHRONOUS_CONTROLS | B_AUTO_UPDATE_SIZE_LIMITS), fCurrentNode(NULL), fParamWeb(NULL), + fAudioInputs(5, true), + fAudioOutputs(5, true), + fVideoInputs(5, true), + fVideoOutputs(5, true), fAlert(NULL), fInitCheck(B_OK) { @@ -66,14 +70,7 @@ 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)); + _EmptyNodeLists(); BMediaRoster* roster = BMediaRoster::Roster(); if (roster && fCurrentNode) @@ -97,8 +94,22 @@ void -MediaWindow::FindNodes(media_type type, uint64 kind, BList &list) +MediaWindow::_FindNodes() { + _FindNodes(B_MEDIA_RAW_AUDIO, B_PHYSICAL_OUTPUT, fAudioOutputs); + _FindNodes(B_MEDIA_RAW_AUDIO, B_PHYSICAL_INPUT, fAudioInputs); + _FindNodes(B_MEDIA_ENCODED_AUDIO, B_PHYSICAL_OUTPUT, fAudioOutputs); + _FindNodes(B_MEDIA_ENCODED_AUDIO, B_PHYSICAL_INPUT, fAudioInputs); + _FindNodes(B_MEDIA_RAW_VIDEO, B_PHYSICAL_OUTPUT, fVideoOutputs); + _FindNodes(B_MEDIA_RAW_VIDEO, B_PHYSICAL_INPUT, fVideoInputs); + _FindNodes(B_MEDIA_ENCODED_VIDEO, B_PHYSICAL_OUTPUT, fVideoOutputs); + _FindNodes(B_MEDIA_ENCODED_VIDEO, B_PHYSICAL_INPUT, fVideoInputs); +} + + +void +MediaWindow::_FindNodes(media_type type, uint64 kind, NodeList& into) +{ dormant_node_info node_info[64]; int32 node_info_count = 64; media_format format; @@ -115,18 +126,20 @@ if (roster->GetDormantNodes(node_info, &node_info_count, format1, format2, NULL, kind)!=B_OK) { + // TODO: better error reporting! fprintf(stderr, "error\n"); return; } - 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", node_info[i].name, node_info[i].addon, node_info[i].flavor_id)); + dormant_node_info* info = new dormant_node_info(); - strcpy(info->name, node_info[i].name); + strncpy(info->name, node_info[i].name, B_MEDIA_NAME_LENGTH); info->flavor_id = node_info[i].flavor_id; info->addon = node_info[i].addon; - list.AddItem(info); + into.AddItem(info); } } @@ -148,11 +161,11 @@ void -MediaWindow::AddNodes(BList &list, bool isVideo) +MediaWindow::_AddNodeItems(NodeList &list, bool isVideo) { - for (int32 i = 0; i<list.CountItems(); i++) { - dormant_node_info* info - = static_cast<dormant_node_info*>(list.ItemAt(i)); + int32 count = list.CountItems(); + for (int32 i = 0; i < count; i++) { + dormant_node_info* info = list.ItemAt(i); if (!FindMediaListItem(info)) fListView->AddItem(new MediaListItem(info, 1, isVideo, &fIcons)); } @@ -160,6 +173,16 @@ void +MediaWindow::_EmptyNodeLists() +{ + fAudioOutputs.MakeEmpty(); + fAudioInputs.MakeEmpty(); + fVideoOutputs.MakeEmpty(); + fVideoInputs.MakeEmpty(); +} + + +void MediaWindow::InitWindow(void) { // Bitmaps @@ -283,34 +306,17 @@ B_TRANSLATE("Ready for use" B_UTF8_ELLIPSIS)); } - void* listItem; - while ((listItem = fListView->RemoveItem((int32)0))) - delete static_cast<MediaListItem *>(listItem); - while ((listItem = fAudioOutputs.RemoveItem((int32)0))) - delete static_cast<dormant_node_info *>(listItem); - while ((listItem = fAudioInputs.RemoveItem((int32)0))) - delete static_cast<dormant_node_info *>(listItem); - while ((listItem = fVideoOutputs.RemoveItem((int32)0))) - delete static_cast<dormant_node_info *>(listItem); - while ((listItem = fVideoInputs.RemoveItem((int32)0))) - delete static_cast<dormant_node_info *>(listItem); + _EmptyNodeLists(); // Grab Media Info - FindNodes(B_MEDIA_RAW_AUDIO, B_PHYSICAL_OUTPUT, fAudioOutputs); - FindNodes(B_MEDIA_RAW_AUDIO, B_PHYSICAL_INPUT, fAudioInputs); - FindNodes(B_MEDIA_ENCODED_AUDIO, B_PHYSICAL_OUTPUT, fAudioOutputs); - FindNodes(B_MEDIA_ENCODED_AUDIO, B_PHYSICAL_INPUT, fAudioInputs); - FindNodes(B_MEDIA_RAW_VIDEO, B_PHYSICAL_OUTPUT, fVideoOutputs); - FindNodes(B_MEDIA_RAW_VIDEO, B_PHYSICAL_INPUT, fVideoInputs); - FindNodes(B_MEDIA_ENCODED_VIDEO, B_PHYSICAL_OUTPUT, fVideoOutputs); - FindNodes(B_MEDIA_ENCODED_VIDEO, B_PHYSICAL_INPUT, fVideoInputs); + _FindNodes(); // Add video nodes first. They might have an additional audio // output or input, but still should be listed as video node. - AddNodes(fVideoOutputs, true); - AddNodes(fVideoInputs, true); - AddNodes(fAudioOutputs, false); - AddNodes(fAudioInputs, false); + _AddNodeItems(fVideoOutputs, true); + _AddNodeItems(fVideoInputs, true); + _AddNodeItems(fAudioOutputs, false); + _AddNodeItems(fAudioInputs, false); fAudioView->AddNodes(fAudioOutputs, false); fAudioView->AddNodes(fAudioInputs, true); Modified: haiku/trunk/src/preferences/media/MediaWindow.h =================================================================== --- haiku/trunk/src/preferences/media/MediaWindow.h 2010-10-23 15:19:58 UTC (rev 39069) +++ haiku/trunk/src/preferences/media/MediaWindow.h 2010-10-23 15:26:45 UTC (rev 39070) @@ -12,17 +12,19 @@ // Created : June 25, 2003 // // ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ - #ifndef __MEDIAWINDOWS_H__ #define __MEDIAWINDOWS_H__ + +#include <Box.h> +#include <ListView.h> #include <MediaAddOn.h> -#include <Window.h> #include <ParameterWeb.h> #include <StringView.h> -#include <ListView.h> -#include <Box.h> +#include <Window.h> +#include <ObjectList.h> + #include "MediaViews.h" #include "MediaListItem.h" #include "MediaAlert.h" @@ -46,10 +48,15 @@ private: + typedef BObjectList<dormant_node_info> NodeList; + + status_t InitMedia(bool first); - void FindNodes(media_type type, uint64 kind, - BList &list); - void AddNodes(BList &list, bool isVideo); + void _FindNodes(); + void _FindNodes(media_type type, uint64 kind, + NodeList& into); + void _AddNodeItems(NodeList& from, bool isVideo); + void _EmptyNodeLists(); MediaListItem* FindMediaListItem(dormant_node_info* info); void InitWindow(); @@ -68,10 +75,11 @@ media_node* fCurrentNode; BParameterWeb* fParamWeb; - BList fAudioInputs; - BList fAudioOutputs; - BList fVideoInputs; - BList fVideoOutputs; + + NodeList fAudioInputs; + NodeList fAudioOutputs; + NodeList fVideoInputs; + NodeList fVideoOutputs; BList fIcons; MediaAlert* fAlert;