Ticket #2437: MediaPlayer - InfoView Icon.diff

File MediaPlayer - InfoView Icon.diff, 3.4 KB (added by anxiety, 11 years ago)
  • src/apps/mediaplayer/InfoWin.cpp

     
    2828#include <String.h>
    2929#include <StringView.h>
    3030#include <TextView.h>
     31#include <Bitmap.h>
     32#include <Mime.h>
    3133
    3234#include "Controller.h"
    3335#include "ControllerObserver.h"
     
    4850// should later draw an icon
    4951class InfoView : public BView {
    5052public:
    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();
    5855    void Draw(BRect updateRect);
     56    void SetMimeType(const char * mimeType);
     57
     58private:
    5959    float fDivider;
     60    BBitmap* fIconBitmap;
    6061};
    6162
    6263
     64InfoView::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
    6381void
     82InfoView::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
     107InfoView::~InfoView()
     108{
     109    delete fIconBitmap;
     110}
     111
     112void
    64113InfoView::Draw(BRect updateRect)
    65114{
    66115    SetHighColor(kGreen);
    67116    BRect r(Bounds());
    68117    r.right = r.left + fDivider;
    69118    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
    70126    SetHighColor(ui_color(B_DOCUMENT_TEXT_COLOR));
    71127    r.left = r.right;
    72128    FillRect(r);
     
    101157                                          rect.right - 10,
    102158                                          20 + fh.ascent + 5),
    103159                                    "filename", "");
     160    AddChild(fFilenameView);                                   
    104161    fFilenameView->SetFont(&bigFont);
    105162    fFilenameView->SetViewColor(fInfoView->ViewColor());
    106163    fFilenameView->SetLowColor(fInfoView->ViewColor());
    107164#ifdef B_BEOS_VERSION_DANO /* maybe we should support that as well ? */
    108165    fFilenameView->SetTruncation(B_TRUNCATE_END);
    109166#endif
    110     AddChild(fFilenameView);
    111                                    
    112167   
    113168    rect.top = BASE_HEIGHT;
    114169
     
    230285    if (!fController->Lock())
    231286        return;
    232287
     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
    233294    fLabelsView->SetFontAndColor(be_plain_font, B_FONT_ALL, &kRed);
    234295
    235296    status_t err;
     
    268329
    269330    // audio track format information
    270331    if ((which & INFO_AUDIO) && fController->AudioTrackCount() > 0) {
    271         fLabelsView->Insert("Audio\n\n\n\n");
     332        fLabelsView->Insert("Audio\n\n\n");
    272333        BString s;
    273334        media_format format;
    274335        media_raw_audio_format audioFormat;