xref: /haiku/src/preferences/bluetooth/RemoteDevicesView.cpp (revision 85fb3e7df81f8d5b6e47a9a64a53873ea906ea6e)
1 /*
2  * Copyright 2008-09, Oliver Ruiz Dorantes, <oliver.ruiz.dorantes_at_gmail.com>
3  * All rights reserved. Distributed under the terms of the MIT License.
4  */
5 #include <stdio.h>
6 
7 #include <Alert.h>
8 #include <Catalog.h>
9 #include <Messenger.h>
10 
11 #include <Directory.h>
12 #include <Entry.h>
13 #include <File.h>
14 #include <Path.h>
15 
16 #include <GroupLayoutBuilder.h>
17 #include <SpaceLayoutItem.h>
18 
19 #include <PincodeWindow.h>
20 #include <bluetooth/RemoteDevice.h>
21 
22 #include "BluetoothWindow.h"
23 #include "defs.h"
24 #include "DeviceListItem.h"
25 #include "InquiryPanel.h"
26 #include "RemoteDevicesView.h"
27 
28 
29 #undef B_TRANSLATION_CONTEXT
30 #define B_TRANSLATION_CONTEXT "Remote devices"
31 
32 static const uint32 kMsgAddDevices = 'ddDv';
33 static const uint32 kMsgRemoveDevice = 'rmDv';
34 static const uint32 kMsgPairDevice = 'trDv';
35 static const uint32 kMsgDisconnectDevice = 'dsDv';
36 static const uint32 kMsgBlockDevice = 'blDv';
37 static const uint32 kMsgRefreshDevices = 'rfDv';
38 
39 using namespace Bluetooth;
40 
41 RemoteDevicesView::RemoteDevicesView(const char* name, uint32 flags)
42  :	BView(name, flags)
43 {
44 	SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));
45 
46 	addButton = new BButton("add", B_TRANSLATE("Add" B_UTF8_ELLIPSIS),
47 		new BMessage(kMsgAddDevices));
48 
49 	removeButton = new BButton("remove", B_TRANSLATE("Remove"),
50 		new BMessage(kMsgRemoveDevice));
51 
52 	pairButton = new BButton("pair", B_TRANSLATE("Pair" B_UTF8_ELLIPSIS),
53 		new BMessage(kMsgPairDevice));
54 
55 	disconnectButton = new BButton("disconnect", B_TRANSLATE("Disconnect"),
56 		new BMessage(kMsgDisconnectDevice));
57 
58 	blockButton = new BButton("block", B_TRANSLATE("As blocked"),
59 		new BMessage(kMsgBlockDevice));
60 
61 
62 	availButton = new BButton("check", B_TRANSLATE("Refresh" B_UTF8_ELLIPSIS),
63 		new BMessage(kMsgRefreshDevices));
64 
65 	// Set up device list
66 	fDeviceList = new BListView("DeviceList", B_SINGLE_SELECTION_LIST);
67 
68 	fScrollView = new BScrollView("ScrollView", fDeviceList, 0, false, true);
69 	fScrollView->SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));
70 
71 	SetLayout(new BGroupLayout(B_VERTICAL));
72 
73 	// TODO: use all the additional height
74 	AddChild(BGroupLayoutBuilder(B_HORIZONTAL, 10)
75 		.Add(fScrollView)
76 		//.Add(BSpaceLayoutItem::CreateHorizontalStrut(5))
77 		.Add(BGroupLayoutBuilder(B_VERTICAL)
78 			.Add(addButton)
79 			.Add(removeButton)
80 			.AddGlue()
81 			.Add(availButton)
82 			.AddGlue()
83 			.Add(pairButton)
84 			.Add(disconnectButton)
85 			.Add(blockButton)
86 			.AddGlue()
87 			.SetInsets(0, 15, 0, 15)
88 		)
89 		.SetInsets(5, 5, 5, 100)
90 	);
91 
92 	fDeviceList->SetSelectionMessage(NULL);
93 }
94 
95 
96 RemoteDevicesView::~RemoteDevicesView(void)
97 {
98 
99 }
100 
101 
102 void
103 RemoteDevicesView::AttachedToWindow(void)
104 {
105 	fDeviceList->SetTarget(this);
106 	addButton->SetTarget(this);
107 	removeButton->SetTarget(this);
108 	pairButton->SetTarget(this);
109 	disconnectButton->SetTarget(this);
110 	blockButton->SetTarget(this);
111 	availButton->SetTarget(this);
112 
113 	LoadSettings();
114 	fDeviceList->Select(0);
115 }
116 
117 
118 void
119 RemoteDevicesView::MessageReceived(BMessage* message)
120 {
121 	switch (message->what) {
122 		case kMsgAddDevices:
123 		{
124 			InquiryPanel* inquiryPanel = new InquiryPanel(BRect(100, 100, 450, 450),
125 				ActiveLocalDevice);
126 			inquiryPanel->Show();
127 			break;
128 		}
129 
130 		case kMsgRemoveDevice:
131 			printf("kMsgRemoveDevice: %ld\n", fDeviceList->CurrentSelection(0));
132 			fDeviceList->RemoveItem(fDeviceList->CurrentSelection(0));
133 			break;
134 		case kMsgAddToRemoteList:
135 		{
136 			BListItem* device;
137 			message->FindPointer("device", (void**)&device);
138 			fDeviceList->AddItem(device);
139 			fDeviceList->Invalidate();
140 			break;
141 		}
142 
143 		case kMsgPairDevice:
144 		{
145 			DeviceListItem* device = static_cast<DeviceListItem*>(fDeviceList
146 				->ItemAt(fDeviceList->CurrentSelection(0)));
147 			RemoteDevice* remote = dynamic_cast<RemoteDevice*>(device->Device());
148 
149 			if (remote != NULL)
150 				remote->Authenticate();
151 
152 			break;
153 		}
154 		case kMsgDisconnectDevice:
155 		{
156 			DeviceListItem* device = static_cast<DeviceListItem*>(fDeviceList
157 				->ItemAt(fDeviceList->CurrentSelection(0)));
158 			RemoteDevice* remote = dynamic_cast<RemoteDevice*>(device->Device());
159 
160 			if (remote != NULL)
161 				remote->Disconnect();
162 
163 			break;
164 		}
165 
166 		default:
167 			BView::MessageReceived(message);
168 			break;
169 	}
170 }
171 
172 
173 void RemoteDevicesView::LoadSettings(void)
174 {
175 
176 }
177 
178 
179 bool RemoteDevicesView::IsDefaultable(void)
180 {
181 	return true;
182 }
183 
184