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