Ticket #2437: MediaPlayer - InfoView Icon.diff
File MediaPlayer - InfoView Icon.diff, 3.4 KB (added by , 16 years ago) |
---|
-
src/apps/mediaplayer/InfoWin.cpp
28 28 #include <String.h> 29 29 #include <StringView.h> 30 30 #include <TextView.h> 31 #include <Bitmap.h> 32 #include <Mime.h> 31 33 32 34 #include "Controller.h" 33 35 #include "ControllerObserver.h" … … 48 50 // should later draw an icon 49 51 class InfoView : public BView { 50 52 public: 51 InfoView(BRect frame, const char *name, float divider) 52 : BView(frame, name, B_FOLLOW_ALL, 53 B_WILL_DRAW | B_FULL_UPDATE_ON_RESIZE) 54 , fDivider(divider) 55 { } 56 virtual ~InfoView() 57 { } 53 InfoView(BRect frame, const char *name, float divider); 54 virtual ~InfoView(); 58 55 void Draw(BRect updateRect); 56 void SetMimeType(const char * mimeType); 57 58 private: 59 59 float fDivider; 60 BBitmap* fIconBitmap; 60 61 }; 61 62 62 63 64 InfoView::InfoView(BRect frame, const char *name, float divider) 65 : BView(frame, name, B_FOLLOW_ALL, B_WILL_DRAW | B_FULL_UPDATE_ON_RESIZE), 66 fDivider(divider), 67 fIconBitmap(NULL) 68 { 69 BRect rect(0, 0, B_LARGE_ICON - 1, B_LARGE_ICON - 1); 70 71 if (!fIconBitmap) { 72 #ifdef HAIKU_TARGET_PLATFORM_HAIKU 73 fIconBitmap = new BBitmap(rect, B_RGBA32); 74 #else 75 fIconBitmap = new BBitmap(rect, B_CMAP8); 76 #endif 77 } 78 } 79 80 63 81 void 82 InfoView::SetMimeType( const char * mimeType ) 83 { 84 status_t status = B_ERROR; 85 86 if (mimeType) { 87 // get type icon 88 BMimeType mimeType(mimeType); 89 status = mimeType.GetIcon(fIconBitmap, B_LARGE_ICON); 90 91 // get supertype icon 92 if (status != B_OK) { 93 BMimeType superType; 94 status = mimeType.GetSupertype(&superType); 95 if (status == B_OK) 96 status = superType.GetIcon(fIconBitmap, B_LARGE_ICON); 97 } 98 } 99 100 // get default icon 101 if (status != B_OK) { 102 BMimeType genericType(B_FILE_MIME_TYPE); 103 status = genericType.GetIcon(fIconBitmap, B_LARGE_ICON); 104 } 105 } 106 107 InfoView::~InfoView() 108 { 109 delete fIconBitmap; 110 } 111 112 void 64 113 InfoView::Draw(BRect updateRect) 65 114 { 66 115 SetHighColor(kGreen); 67 116 BRect r(Bounds()); 68 117 r.right = r.left + fDivider; 69 118 FillRect(r); 119 120 if (fIconBitmap) { 121 float left = r.left + ( r.right - r.left ) / 2 - B_LARGE_ICON / 2; 122 SetDrawingMode(B_OP_ALPHA); 123 DrawBitmap(fIconBitmap, BPoint(left, r.top + B_LARGE_ICON / 2)); 124 } 125 70 126 SetHighColor(ui_color(B_DOCUMENT_TEXT_COLOR)); 71 127 r.left = r.right; 72 128 FillRect(r); … … 101 157 rect.right - 10, 102 158 20 + fh.ascent + 5), 103 159 "filename", ""); 160 AddChild(fFilenameView); 104 161 fFilenameView->SetFont(&bigFont); 105 162 fFilenameView->SetViewColor(fInfoView->ViewColor()); 106 163 fFilenameView->SetLowColor(fInfoView->ViewColor()); 107 164 #ifdef B_BEOS_VERSION_DANO /* maybe we should support that as well ? */ 108 165 fFilenameView->SetTruncation(B_TRUNCATE_END); 109 166 #endif 110 AddChild(fFilenameView);111 112 167 113 168 rect.top = BASE_HEIGHT; 114 169 … … 230 285 if (!fController->Lock()) 231 286 return; 232 287 288 media_file_format fileFormat; 289 if (fController->GetFileFormatInfo(&fileFormat) == B_OK) 290 fInfoView->SetMimeType(fileFormat.mime_type); 291 else 292 fInfoView->SetMimeType(NULL); 293 233 294 fLabelsView->SetFontAndColor(be_plain_font, B_FONT_ALL, &kRed); 234 295 235 296 status_t err; … … 268 329 269 330 // audio track format information 270 331 if ((which & INFO_AUDIO) && fController->AudioTrackCount() > 0) { 271 fLabelsView->Insert("Audio\n\n\n \n");332 fLabelsView->Insert("Audio\n\n\n"); 272 333 BString s; 273 334 media_format format; 274 335 media_raw_audio_format audioFormat;