1/* 2 * Copyright 2009, Oliver Ruiz Dorantes, <oliver.ruiz.dorantes_at_gmail.com> 3 * All rights reserved. Distributed under the terms of the MIT License. 4 */ 5 6#include <Bitmap.h> 7#include <View.h> 8 9#include <bluetooth/bdaddrUtils.h> 10#include <bluetooth/BluetoothDevice.h> 11/*#include "../media/iconfile.h"*/ 12 13#include "DeviceListItem.h" 14 15#define INSETS 5 16#define TEXT_ROWS 2 17 18namespace Bluetooth { 19 20DeviceListItem::DeviceListItem(BluetoothDevice* bDevice) 21 : 22 BListItem(), 23 fDevice(bDevice), 24 fName("unknown") 25{ 26 fAddress = bDevice->GetBluetoothAddress(); 27 fClass = bDevice->GetDeviceClass(); 28} 29 30 31void 32DeviceListItem::SetDevice(BluetoothDevice* bDevice) 33{ 34 fAddress = bDevice->GetBluetoothAddress(); 35 fClass = bDevice->GetDeviceClass(); 36 fName = bDevice->GetFriendlyName(); 37 // AKAIR rssi we can just have it @ inquiry time... 38} 39 40 41DeviceListItem::~DeviceListItem() 42{ 43 44} 45 46 47void 48DeviceListItem::DrawItem(BView* owner, BRect itemRect, bool complete) 49{ 50 rgb_color kBlack = { 0, 0, 0, 0 }; 51 rgb_color kHighlight = { 156, 154, 156, 0 }; 52 53 if (IsSelected() || complete) { 54 rgb_color color; 55 if (IsSelected()) 56 color = kHighlight; 57 else 58 color = owner->ViewColor(); 59 60 owner->SetHighColor(color); 61 owner->SetLowColor(color); 62 owner->FillRect(itemRect); 63 owner->SetHighColor(kBlack); 64 65 } else { 66 owner->SetLowColor(owner->ViewColor()); 67 } 68 69 font_height finfo; 70 be_plain_font->GetHeight(&finfo); 71 72 BPoint point = BPoint(itemRect.left + DeviceClass::PixelsForIcon 73 + 2 * INSETS, itemRect.bottom - finfo.descent + 1); 74 owner->SetFont(be_fixed_font); 75 owner->SetHighColor(kBlack); 76 owner->MovePenTo(point); 77 78 BString secondLine; 79 80 secondLine << bdaddrUtils::ToString(fAddress) << " "; 81 fClass.GetMajorDeviceClass(secondLine); 82 secondLine << " / "; 83 fClass.GetMinorDeviceClass(secondLine); 84 85 owner->DrawString(secondLine.String()); 86 87 point -= BPoint(0, (finfo.ascent + finfo.descent + finfo.leading) + INSETS); 88 89 owner->SetFont(be_plain_font); 90 owner->MovePenTo(point); 91 owner->DrawString(fName.String()); 92 93 fClass.Draw(owner, BPoint(itemRect.left, itemRect.top)); 94 95#if 0 96 switch (fClass.GetMajorDeviceClass()) { 97 case 1: 98 { 99 BRect iconRect(0, 0, 15, 15); 100 BBitmap* icon = new BBitmap(iconRect, B_CMAP8); 101 icon->SetBits(kTVBits, kTVWidth * kTVHeight, 0, kTVColorSpace); 102 owner->DrawBitmap(icon, iconRect, BRect(itemRect.left + INSETS, 103 itemRect.top + INSETS, itemRect.left + INSETS + PIXELS_FOR_ICON, 104 itemRect.top + INSETS + PIXELS_FOR_ICON)); 105 break; 106 } 107 case 4: 108 { 109 BRect iconRect(0, 0, 15, 15); 110 BBitmap* icon = new BBitmap(iconRect, B_CMAP8); 111 icon->SetBits(kMixerBits, kMixerWidth * kMixerHeight, 0, kMixerColorSpace); 112 owner->DrawBitmap(icon, iconRect, BRect(itemRect.left + INSETS, 113 itemRect.top + INSETS, itemRect.left + INSETS + PIXELS_FOR_ICON, 114 itemRect.top + INSETS + PIXELS_FOR_ICON)); 115 break; 116 } 117 } 118#endif 119 120 owner->SetHighColor(kBlack); 121 122} 123 124 125void 126DeviceListItem::Update(BView* owner, const BFont* font) 127{ 128 BListItem::Update(owner, font); 129 130 font_height height; 131 font->GetHeight(&height); 132 SetHeight(MAX((height.ascent + height.descent + height.leading) * TEXT_ROWS 133 + (TEXT_ROWS + 1)*INSETS, DeviceClass::PixelsForIcon + 2 * INSETS)); 134 135} 136 137 138int 139DeviceListItem::Compare(const void *firstArg, const void *secondArg) 140{ 141 const DeviceListItem* item1 = *static_cast<const DeviceListItem* const *> 142 (firstArg); 143 const DeviceListItem* item2 = *static_cast<const DeviceListItem* const *> 144 (secondArg); 145 146 return (int)bdaddrUtils::Compare(item1->fAddress, item2->fAddress); 147} 148 149 150BluetoothDevice* 151DeviceListItem::Device() const 152{ 153 return fDevice; 154} 155 156 157} 158