Author: yourpalal Date: 2010-10-29 03:22:23 +0200 (Fri, 29 Oct 2010) New Revision: 39180 Changeset: http://dev.haiku-os.org/changeset/39180 Added: haiku/trunk/src/preferences/media/IconHandles.h haiku/trunk/src/preferences/media/MediaIcons.cpp haiku/trunk/src/preferences/media/MediaIcons.h Removed: haiku/trunk/src/preferences/media/iconfile.h Modified: haiku/trunk/src/preferences/media/Jamfile haiku/trunk/src/preferences/media/Media.cpp haiku/trunk/src/preferences/media/MediaListItem.cpp haiku/trunk/src/preferences/media/MediaListItem.h haiku/trunk/src/preferences/media/MediaWindow.cpp haiku/trunk/src/preferences/media/MediaWindow.h haiku/trunk/src/preferences/media/media.rdef Log: In Media preflet: * Move icons to resource file. * Add MediaIcons class to handle loading and storing the icons. * Use a MediaIcons object in place of a BList for passing icons to our list items. * Add IconHandles.h to hold an enum for identifying icons in/from our resource file. * style fixes Added: haiku/trunk/src/preferences/media/IconHandles.h =================================================================== --- haiku/trunk/src/preferences/media/IconHandles.h (rev 0) +++ haiku/trunk/src/preferences/media/IconHandles.h 2010-10-29 01:22:23 UTC (rev 39180) @@ -0,0 +1,15 @@ +/* + * Copyright 2010, Haiku, Inc. All rights reserved. + * Distributed under the terms of the MIT License. + */ + + +enum { + devices_icon = 1, + mixer_icon = 2, + tv_icon = 3, + cam_icon = 4, + mic_icon = 5, + speaker_icon = 6 +}; + Modified: haiku/trunk/src/preferences/media/Jamfile =================================================================== --- haiku/trunk/src/preferences/media/Jamfile 2010-10-28 22:20:04 UTC (rev 39179) +++ haiku/trunk/src/preferences/media/Jamfile 2010-10-29 01:22:23 UTC (rev 39180) @@ -11,10 +11,11 @@ Preference Media : Media.cpp + MediaAlert.cpp + MediaIcons.cpp + MediaListItem.cpp + MediaViews.cpp MediaWindow.cpp - MediaViews.cpp - MediaListItem.cpp - MediaAlert.cpp : media be $(HAIKU_LOCALE_LIBS) $(TARGET_LIBSUPC++) : media.rdef ; Modified: haiku/trunk/src/preferences/media/Media.cpp =================================================================== --- haiku/trunk/src/preferences/media/Media.cpp 2010-10-28 22:20:04 UTC (rev 39179) +++ haiku/trunk/src/preferences/media/Media.cpp 2010-10-29 01:22:23 UTC (rev 39180) @@ -21,7 +21,8 @@ Media::Media() : - BApplication("application/x-vnd.Haiku-Media") + BApplication("application/x-vnd.Haiku-Media"), + fWindow(NULL) { BRect rect(32, 64, 637, 462); Added: haiku/trunk/src/preferences/media/MediaIcons.cpp =================================================================== --- haiku/trunk/src/preferences/media/MediaIcons.cpp (rev 0) +++ haiku/trunk/src/preferences/media/MediaIcons.cpp 2010-10-29 01:22:23 UTC (rev 39180) @@ -0,0 +1,55 @@ +/* + * Copyright 2010, Haiku, Inc. All rights reserved. + * Distributed under the terms of the MIT License. + */ + +#include "MediaIcons.h" + +#include <Application.h> +#include <File.h> +#include <Resources.h> +#include <Roster.h> + +#include "IconHandles.h" + + +const BRect MediaIcons::sBounds(0, 0, 15, 15); + +MediaIcons::MediaIcons() + : + devicesIcon(sBounds, B_CMAP8), + mixerIcon(sBounds, B_CMAP8), + tvIcon(sBounds, B_CMAP8), + camIcon(sBounds, B_CMAP8), + micIcon(sBounds, B_CMAP8), + speakerIcon(sBounds, B_CMAP8) +{ + app_info info; + be_app->GetAppInfo(&info); + BFile executableFile(&info.ref, B_READ_ONLY); + BResources resources(&executableFile); + resources.PreloadResourceType(B_COLOR_8_BIT_TYPE); + + _LoadBitmap(&resources, devices_icon, &devicesIcon); + _LoadBitmap(&resources, mixer_icon, &mixerIcon); + _LoadBitmap(&resources, tv_icon, &tvIcon); + _LoadBitmap(&resources, cam_icon, &camIcon); + _LoadBitmap(&resources, mic_icon, &micIcon); + _LoadBitmap(&resources, speaker_icon, &speakerIcon); +} + + +void +MediaIcons::_LoadBitmap(BResources* resources, int32 id, BBitmap* bitmap) +{ + size_t size; + const void* bits = resources->LoadResource(B_COLOR_8_BIT_TYPE, id, &size); + bitmap->SetBits(bits, size, 0, B_CMAP8); +} + + +BRect +MediaIcons::IconRectAt(const BPoint& topLeft) +{ + return BRect(sBounds).OffsetToSelf(topLeft); +} Added: haiku/trunk/src/preferences/media/MediaIcons.h =================================================================== --- haiku/trunk/src/preferences/media/MediaIcons.h (rev 0) +++ haiku/trunk/src/preferences/media/MediaIcons.h 2010-10-29 01:22:23 UTC (rev 39180) @@ -0,0 +1,33 @@ +/* + * Copyright 2010, Haiku, Inc. All rights reserved. + * Distributed under the terms of the MIT License. + */ +#ifndef __MEDIA_ICONS_H +#define __MEDIA_ICONS_H + +#include <Bitmap.h> + + +class BResources; + + +struct MediaIcons { + MediaIcons(); + + BBitmap devicesIcon; + BBitmap mixerIcon; + BBitmap tvIcon; + BBitmap camIcon; + BBitmap micIcon; + BBitmap speakerIcon; + + BRect IconRectAt(const BPoint& topLeft); +private: + + static const BRect sBounds; + + void _LoadBitmap(BResources* resources, int32 id, + BBitmap* bitmap); +}; + +#endif Modified: haiku/trunk/src/preferences/media/MediaListItem.cpp =================================================================== --- haiku/trunk/src/preferences/media/MediaListItem.cpp 2010-10-28 22:20:04 UTC (rev 39179) +++ haiku/trunk/src/preferences/media/MediaListItem.cpp 2010-10-29 01:22:23 UTC (rev 39180) @@ -20,40 +20,40 @@ #include <View.h> +#include "MediaIcons.h" + #define kITEM_MARGIN 1 MediaListItem::MediaListItem(dormant_node_info* info, uint32 level, - bool isVideo, BList* icons, uint32 modifiers) + bool isVideo, MediaIcons* icons, uint32 modifiers) : BListItem(level), + fInfo(info), + fLabel(info->name), fIsAudioMixer(false), fIsVideo(isVideo), fIsDefaultInput(false), - fIsDefaultOutput(false) + fIsDefaultOutput(false), + fIcons(icons) { - fIcons = icons; - fInfo = info; - fLabel = fInfo->name; - SetHeight(16 + kITEM_MARGIN); } MediaListItem::MediaListItem(const char* label, uint32 level, - bool isVideo, BList* icons, uint32 modifiers) + bool isVideo, MediaIcons* icons, uint32 modifiers) : BListItem(level), + fInfo(NULL), fLabel(label), fIsAudioMixer(false), fIsVideo(isVideo), fIsDefaultInput(false), - fIsDefaultOutput(false) + fIsDefaultOutput(false), + fIcons(icons) { - fIcons = icons; - fInfo = NULL; - SetHeight(16 + kITEM_MARGIN); } @@ -88,38 +88,36 @@ } frame.left += 4; - BRect iconFrame(frame); - iconFrame.Set(iconFrame.left, iconFrame.top+1, - iconFrame.left+15, iconFrame.top+16); - uint32 index = 0; - if (OutlineLevel()==0 || (fIsDefaultInput && fIsDefaultOutput)) { + BRect iconFrame(fIcons->IconRectAt(BPoint(frame.left, frame.top + 1))); + + BBitmap* icon = &fIcons->devicesIcon; + if (OutlineLevel() == 0 || (fIsDefaultInput && fIsDefaultOutput)) { if (fIsDefaultInput && fIsVideo) - index = 4; + icon = &fIcons->camIcon; else if (fIsDefaultInput && !fIsVideo) - index = 2; - owner->SetDrawingMode(B_OP_OVER); + icon = &fIcons->micIcon; - BBitmap* icon = static_cast<BBitmap*>(fIcons->ItemAt(index)); + owner->SetDrawingMode(B_OP_OVER); owner->DrawBitmap(icon, iconFrame); owner->SetDrawingMode(B_OP_COPY); } + iconFrame.OffsetBy(16, 0); if (fIsDefaultInput || fIsDefaultOutput || fIsAudioMixer) { if (fIsAudioMixer) - index = 1; + icon = &fIcons->mixerIcon; else if (fIsDefaultOutput) { if (fIsVideo) - index = 5; + icon = &fIcons->tvIcon; else - index = 3; + icon = &fIcons->speakerIcon; } else { if (fIsVideo) - index = 4; + icon = &fIcons->camIcon; else - index = 2; + icon = &fIcons->speakerIcon; } owner->SetDrawingMode(B_OP_OVER); - BBitmap* icon = static_cast<BBitmap*>(fIcons->ItemAt(index)); owner->DrawBitmap(icon, iconFrame); owner->SetDrawingMode(B_OP_COPY); } @@ -159,7 +157,7 @@ void 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 our // list item size doesn't change BListItem::Update(owner, finfo); if ((Height() < 16 + kITEM_MARGIN)) { @@ -172,9 +170,9 @@ MediaListItem::Compare(const void* firstArg, const void* secondArg) { const MediaListItem* item1 - = *static_cast<const MediaListItem * const *>(firstArg); + = *static_cast<const MediaListItem* const*>(firstArg); const MediaListItem* item2 - = *static_cast<const MediaListItem * const *>(secondArg); + = *static_cast<const MediaListItem* const*>(secondArg); if (item1->fIsVideo != item2->fIsVideo) return item1->fIsVideo ? 1 : -1; Modified: haiku/trunk/src/preferences/media/MediaListItem.h =================================================================== --- haiku/trunk/src/preferences/media/MediaListItem.h 2010-10-28 22:20:04 UTC (rev 39179) +++ haiku/trunk/src/preferences/media/MediaListItem.h 2010-10-29 01:22:23 UTC (rev 39180) @@ -20,13 +20,16 @@ #include <MediaAddOn.h> +class MediaIcons; + + class MediaListItem : public BListItem { public: MediaListItem(dormant_node_info* info, - uint32 level, bool isVideo, BList* icons, - uint32 modifiers=0); + uint32 level, bool isVideo, + MediaIcons* icons, uint32 modifiers = 0); MediaListItem(const char* label, uint32 level, - bool isVideo, BList* icons, + bool isVideo, MediaIcons* icons, uint32 modifiers=0); virtual ~MediaListItem(); @@ -60,7 +63,7 @@ bool fIsDefaultInput; bool fIsDefaultOutput; //dormant_node_info fNodeInfo; - BList* fIcons; + MediaIcons* fIcons; }; #endif /* __MEDIALISTITEM_H__ */ Modified: haiku/trunk/src/preferences/media/MediaWindow.cpp =================================================================== --- haiku/trunk/src/preferences/media/MediaWindow.cpp 2010-10-28 22:20:04 UTC (rev 39179) +++ haiku/trunk/src/preferences/media/MediaWindow.cpp 2010-10-29 01:22:23 UTC (rev 39180) @@ -23,6 +23,7 @@ #include <Locale.h> #include <MediaRoster.h> #include <MediaTheme.h> +#include <Resources.h> #include <Roster.h> #include <Screen.h> #include <ScrollView.h> @@ -32,8 +33,7 @@ #include <String.h> #include <TextView.h> -// Images -#include "iconfile.h" +#include "MediaIcons.h" #undef B_TRANSLATE_CONTEXT @@ -43,6 +43,7 @@ const uint32 ML_SELECTED_NODE = 'MlSN'; const uint32 ML_INIT_MEDIA = 'MlIM'; + // MediaWindow - Constructor MediaWindow::MediaWindow(BRect frame) : @@ -54,6 +55,7 @@ fAudioOutputs(5, true), fVideoInputs(5, true), fVideoOutputs(5, true), + fIcons(), fAlert(NULL), fInitCheck(B_OK) { @@ -183,32 +185,8 @@ void -MediaWindow::InitWindow(void) +MediaWindow::InitWindow() { - // Bitmaps - BRect iconRect(0, 0, 15, 15); - BBitmap* icon = new BBitmap(iconRect, B_CMAP8); - icon->SetBits(kDevicesBits, kDevicesWidth * kDevicesHeight, 0, - kDevicesColorSpace); - fIcons.AddItem(icon); - icon = new BBitmap(iconRect, B_CMAP8); - icon->SetBits(kMixerBits, kMixerWidth * kMixerHeight, 0, - kMixerColorSpace); - fIcons.AddItem(icon); - icon = new BBitmap(iconRect, B_CMAP8); - icon->SetBits(kMicBits, kMicWidth * kMicHeight, 0, kMicColorSpace); - fIcons.AddItem(icon); - icon = new BBitmap(iconRect, B_CMAP8); - icon->SetBits(kSpeakerBits, kSpeakerWidth * kSpeakerHeight, 0, - kSpeakerColorSpace); - fIcons.AddItem(icon); - icon = new BBitmap(iconRect, B_CMAP8); - icon->SetBits(kCamBits, kCamWidth * kCamHeight, 0, kCamColorSpace); - fIcons.AddItem(icon); - icon = new BBitmap(iconRect, B_CMAP8); - icon->SetBits(kTVBits, kTVWidth * kTVHeight, 0, kTVColorSpace); - fIcons.AddItem(icon); - const float scrollWidth = 9 * be_plain_font->Size() + 30; fListView = new BListView("media_list_view"); Modified: haiku/trunk/src/preferences/media/MediaWindow.h =================================================================== --- haiku/trunk/src/preferences/media/MediaWindow.h 2010-10-28 22:20:04 UTC (rev 39179) +++ haiku/trunk/src/preferences/media/MediaWindow.h 2010-10-29 01:22:23 UTC (rev 39180) @@ -25,15 +25,17 @@ #include <ObjectList.h> +#include "MediaAlert.h" +#include "MediaIcons.h" +#include "MediaListItem.h" #include "MediaViews.h" -#include "MediaListItem.h" -#include "MediaAlert.h" #define SETTINGS_FILE "MediaPrefs Settings" class BSeparatorView; +// struct dormant_node_info; class MediaWindow : public BWindow @@ -81,7 +83,9 @@ NodeList fVideoInputs; NodeList fVideoOutputs; - BList fIcons; + MediaIcons fIcons; + + MediaAlert* fAlert; status_t fInitCheck; }; Modified: haiku/trunk/src/preferences/media/media.rdef =================================================================== --- haiku/trunk/src/preferences/media/media.rdef 2010-10-28 22:20:04 UTC (rev 39179) +++ haiku/trunk/src/preferences/media/media.rdef 2010-10-29 01:22:23 UTC (rev 39180) @@ -1,3 +1,4 @@ +#include "IconHandles.h" resource app_signature "application/x-vnd.Haiku-Media"; @@ -13,7 +14,7 @@ internal = 0, short_info = "Media", - long_info = "Media ©2003-2009 Haiku" + long_info = "Media ©2003-2010 Haiku" }; resource app_flags B_SINGLE_LAUNCH; @@ -41,3 +42,122 @@ $"040A07010920372A0A08010A20372A0A09010B20372A" }; + +resource(devices_icon) #'CLRB' array { + $"ffff0000ffffffffffffffffffffffff" + $"ffff009f2929ffffffffffffffffffff" + $"ffff0070379f0129ffffffffffffffff" + $"ffff01fafa773ab72929ffffffffffff" + $"ffff00913e91dc779797290000ffffff" + $"ffff00907f71fa6bfa7197071329ffff" + $"ffff0071706bfacb6b3e081400ffffff" + $"ffff006b45fafaaafa71051129ffffff" + $"ffff004be53c777171fa061129ffffff" + $"ffff0091fab7713c7770071200ffffff" + $"ffff2900fa516b3afafa061229ffffff" + $"ffffff290097f951fa97081601ffffff" + $"ffffffffff290097fa06071600ffffff" + $"ffffffffffffff290000061600ffffff" + $"ffffffffffffffffffff000d00ffffff" + $"ffffffffffffffffffffff00ffffffff" +}; + + +resource(mixer_icon) #'CLRB' array { + $"ffffffffffff00ffffffffffffffffff" + $"ffffffffff00170000ffffffffffffff" + $"ffffffff001717183f0000ffffffffff" + $"ffffff0017173118003f3f0000ffffff" + $"ffff001717183f171700003f3f0000ff" + $"ff0017173118003f3f17170000181700" + $"001718173f171700003f3f1717180a00" + $"003f3117003f3f1717000018170b0400" + $"0017183f3f00003f3f1717180a050a00" + $"00111118173f3f000017170b040b000f" + $"000404111118173f3f170b040a000fff" + $"0011110404111117180a050a000fffff" + $"ff000011110404110b040b000effffff" + $"ffffff0000111104040b000fffffffff" + $"ffffffffff0000110a000fffffffffff" + $"ffffffffffffff00000effffffffffff" +}; + + +resource(tv_icon) #'CLRB' array { + $"ffffffffffffffffffffffffffffffff" + $"ffffffffffffffff00ffffffffffffff" + $"ffff06060506ffff00ffff00ffffffff" + $"ff053f3f1e17050600ff00ffffffffff" + $"ff043f3f1d1e1d190000ffffffffffff" + $"ff0513143f3f1e1e00060600ffffffff" + $"ff0511d50c133f3f1e1e1e01ffffffff" + $"ff0511d5600c0a153f3f1601ffffffff" + $"ff0511d5606086d515170c03ffffffff" + $"ff0511d5606086d360190f03ffffffff" + $"ff0511d38686862360190f03ffffffff" + $"ff00151c1d3fd3d36019100511ffffff" + $"ffff020211193f3f60161105111111ff" + $"ffffffff0202111a201512051111ffff" + $"ffffffffffff0202122a0f0011ffffff" + $"ffffffffffffffff02050011ffffffff" +}; + + +resource(cam_icon) #'CLRB' array { + $"ffffffffffffffffffffffffffffffff" + $"ffffffffffffffffffffffffffffffff" + $"ffffff0000ffffffffffff0000ffffff" + $"ff00001b1c00ffffff00013f1b01ffff" + $"003f1c1a0100ff00001a1c1c3f0f00ff" + $"0015153f1c1b021c1c1c3f0f0f0f00ff" + $"ff000015153f3f3f3f0f0f0f0f0f00ff" + $"ffffff00000a150a0f0f0f0f0f0f00ff" + $"ff05050500140b0a0f0f0f0f0f00ffff" + $"02021c0e000707070f0f0f0f06000f0f" + $"0015063f050707070f0f0600000f0f0f" + $"0006063f050707070f00000f0f0fffff" + $"02020202057b0700000f0f0fffffffff" + $"ff000005ff00000f0f0fffffffffffff" + $"ffffffffffffffffffffffffffffffff" + $"ffffffffffffffffffffffffffffffff" +}; + + +resource(mic_icon) #'CLRB' array { + $"ffffffffff000000ffffffffffffffff" + $"ffffffff031919190000ffffffffffff" + $"ffffffff00091219190f00ffffffffff" + $"ffffffff00191912090f0f00ffffffff" + $"ffffffff0009121919050f00ffffffff" + $"ffffff0209191909050f0f00ffffffff" + $"ffffff00191212190f050f00ffffffff" + $"ffffff0009191909050f00ffffffffff" + $"ffffff00191209190f0f00ffffffffff" + $"ffffffff00191909050f00ffffffffff" + $"ffffffffff00080c0800ffffffffffff" + $"ffffffffffff000c00ffffffffffffff" + $"ffffff0000003f0c090000000f0fffff" + $"ffff003f1c1c190f0f090909000f0fff" + $"ffff00001c1c19140f0f0900000f0fff" + $"ffffffff000000000000030f0f0fffff" +}; + + +resource(speaker_icon) #'CLRB' array { + $"ffffffffff000000ffffffffffffffff" + $"ffffffff003f1c1c0000ffffffffffff" + $"ffffff003f1c1c1c1c1c0000ffffffff" + $"ffff003f3f1c1c1c1c1c1c1100ffffff" + $"ffff0017183f3f1c1c1c110f00ffffff" + $"ffff00171718173f3f110f0f00ffffff" + $"ffff001100000017110f0f0f00ffffff" + $"ffff000008090011110f0f0f00ffffff" + $"ffff0000080f0b08110f0f0f00ffffff" + $"ffff0011000a0f09110f0f0f00ffffff" + $"ffff001711080911110f0f0f00ffffff" + $"ffff001717171717110f0f0f000fffff" + $"ffff000017172d18110f0f000f0fffff" + $"ffffffff00001717110f000f0fffffff" + $"ffffffffffff000011000f0fffffffff" + $"ffffffffffffffff000f0fffffffffff" +};