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