diff --git a/src/preferences/bluetooth/BluetoothDeviceView.cpp b/src/preferences/bluetooth/BluetoothDeviceView.cpp new file mode 100644 index 0000000000..c3c586af25 --- /dev/null +++ b/src/preferences/bluetooth/BluetoothDeviceView.cpp @@ -0,0 +1,119 @@ +/* + * Copyright 2008-09, Oliver Ruiz Dorantes, + * All rights reserved. Distributed under the terms of the MIT License. + */ +#include "BluetoothDeviceView.h" +#include + + +#include +#include +#include +#include +#include + + +BluetoothDeviceView::BluetoothDeviceView(BRect frame, BluetoothDevice* bDevice, uint32 resizingMode, uint32 flags) + : BView(frame,"BluetoothDeviceView", resizingMode, flags | B_WILL_DRAW), + fDevice(bDevice) +{ + SetViewColor(B_TRANSPARENT_COLOR); + SetLowColor(0,0,0); + BRect iDontCare(0,0,0,0); + + SetLayout(new BGroupLayout(B_VERTICAL)); + + fName = new BStringView(iDontCare, "name", ""); + fName->SetFont(be_bold_font); + + fBdaddr = new BStringView(iDontCare, "bdaddr", bdaddrUtils::ToString(bdaddrUtils::NullAddress())); + + fClassService = new BStringView(iDontCare, "ServiceClass", "Service Classes: "); + + fClass = new BStringView(iDontCare, "class", "- / -"); + + fIcon = new BitmapView(new BBitmap(BRect(0, 0, 64 - 1, 64 - 1), B_RGBA32)); + + fIcon->SetViewColor(0,0,0); + + SetBluetoothDevice(bDevice); + + AddChild(BGroupLayoutBuilder(B_HORIZONTAL, 10) + .Add(fIcon) + .Add(BGroupLayoutBuilder(B_VERTICAL) + .Add(fName) + .AddGlue() + .Add(fBdaddr) + .AddGlue() + .AddGlue() + .Add(fClass) + .AddGlue() + .Add(fClassService) + + .SetInsets(5, 25, 25, 25) + ) + .Add(BSpaceLayoutItem::CreateHorizontalStrut(10) + ).SetInsets(20, 20, 20, 20) + ); + +} + + +BluetoothDeviceView::~BluetoothDeviceView(void) +{ + +} + + +void +BluetoothDeviceView::SetBluetoothDevice(BluetoothDevice* bDevice) +{ + if (bDevice != NULL) { + + SetName(bDevice->GetFriendlyName().String()); + + fName->SetText(bDevice->GetFriendlyName().String()); + fBdaddr->SetText(bdaddrUtils::ToString(bDevice->GetBluetoothAddress())); + + BString str("Service Classes: "); + bDevice->GetDeviceClass().GetServiceClass(str); + fClassService->SetText(str.String()); + + str = ""; + bDevice->GetDeviceClass().GetMajorDeviceClass(str); + str << " / "; + bDevice->GetDeviceClass().GetMinorDeviceClass(str); + fClass->SetText(str.String()); + + } + + +} + + +void +BluetoothDeviceView::SetTarget(BHandler *tgt) +{ + +} + + +void +BluetoothDeviceView::MessageReceived(BMessage *msg) +{ + // If we received a dropped message, try to see if it has color data + // in it + if(msg->WasDropped()) { + + } + + // The default + BView::MessageReceived(msg); +} + + +void +BluetoothDeviceView::SetEnabled(bool value) +{ + +} diff --git a/src/preferences/bluetooth/BluetoothDeviceView.h b/src/preferences/bluetooth/BluetoothDeviceView.h new file mode 100644 index 0000000000..d9198d0c03 --- /dev/null +++ b/src/preferences/bluetooth/BluetoothDeviceView.h @@ -0,0 +1,83 @@ +/* + * Copyright 2008-09, Oliver Ruiz Dorantes, + * All rights reserved. Distributed under the terms of the MIT License. + */ +#ifndef BLUETOOTHDEVICEVIEW_H_ +#define BLUETOOTHDEVICEVIEW_H_ + +#include +#include +#include +#include +#include + +#include + + +class BStringView; +class BitmapView; + +class BluetoothDeviceView : public BView +{ +public: + BluetoothDeviceView(BRect frame, BluetoothDevice* bDevice, + uint32 resizingMode = B_FOLLOW_LEFT | B_FOLLOW_TOP, + uint32 flags = B_WILL_DRAW); + ~BluetoothDeviceView(void); + + void SetBluetoothDevice(BluetoothDevice* bdev); + + virtual void MessageReceived(BMessage *msg); + virtual void SetTarget(BHandler *tgt); + virtual void SetEnabled(bool value); + +protected: + BluetoothDevice* fDevice; + + BStringView* fName; + BStringView* fBdaddr; + BStringView* fClassService; + BStringView* fClass; + + BitmapView* fIcon; + +}; + + +class BitmapView : public BView +{ + public: + BitmapView(BBitmap *bitmap) : BView(bitmap->Bounds(), NULL, + B_FOLLOW_NONE, B_WILL_DRAW) + { + fBitmap = bitmap; + + SetDrawingMode(B_OP_ALPHA); + SetBlendingMode(B_PIXEL_ALPHA, B_ALPHA_OVERLAY); + } + + ~BitmapView() + { + delete fBitmap; + } + + virtual void AttachedToWindow() + { + //SetViewColor(Parent()->ViewColor()); + + //MoveTo((Parent()->Bounds().Width() - Bounds().Width()) / 2, Frame().top); + } + + virtual void Draw(BRect updateRect) + { + DrawBitmap(fBitmap, updateRect, updateRect); + } + + private: + BBitmap *fBitmap; +}; + + + + +#endif diff --git a/src/preferences/bluetooth/BluetoothMain.cpp b/src/preferences/bluetooth/BluetoothMain.cpp new file mode 100644 index 0000000000..94c9591382 --- /dev/null +++ b/src/preferences/bluetooth/BluetoothMain.cpp @@ -0,0 +1,72 @@ +/* + * Copyright 2008-09, Oliver Ruiz Dorantes, + * All rights reserved. Distributed under the terms of the MIT License. + */ +#include + +#include + +#include "BluetoothMain.h" +#include "BluetoothWindow.h" +#include "defs.h" + +BluetoothApplication::BluetoothApplication(void) + : BApplication(BLUETOOTH_APP_SIGNATURE) +{ + fWindow = new BluetoothWindow(BRect(100, 100, 550, 420)); + fWindow->Show(); +} + + +void +BluetoothApplication::AboutRequested() +{ + + (new BAlert("about", "Haiku Bluetooth System, (ARCE) + +Created by Oliver Ruiz Dorantes + +With support of: + - Mika Lindqvist + - Maksym Yevmenkin + +Thanks to the individuals who helped... + +Shipping/donating hardware: + - Henry Jair Abril Florez(el Colombian) + & Stefanie Bartolich + - Dennis d'Entremont + - Luroh + - Pieter Panman + +Economically: + - Karl von Dorf, Andrea Bernardi (OSDrawer), + - Matt M, Doug F, Hubert H, + - Sebastian B, Andrew M, Jared E, + - Frederik H, Tom S, Ferry B, + - Greg G, David F, Richard S, Martin W: + +With patches: + - Fredrik Ekdahl + - Andreas Färber + +Testing: + - Petter H. Juliussen + - Raynald Lesieur + - Adrien Destugues + - Jörg Meyer + +Who gave me all the knowledge: + - the yellowTAB team", "OK"))->Go(); + +} + + +int +main(int, char**) +{ + BluetoothApplication myApplication; + myApplication.Run(); + + return 0; +} diff --git a/src/preferences/bluetooth/BluetoothMain.h b/src/preferences/bluetooth/BluetoothMain.h new file mode 100644 index 0000000000..61ffe0e360 --- /dev/null +++ b/src/preferences/bluetooth/BluetoothMain.h @@ -0,0 +1,24 @@ +/* + * Copyright 2008-09, Oliver Ruiz Dorantes, + * All rights reserved. Distributed under the terms of the MIT License. + */ +#ifndef BLUETOOTH_MAIN_H +#define BLUETOOTH_MAIN_H + +#include + +class BluetoothWindow; + +class BluetoothApplication : public BApplication +{ + +public: + BluetoothApplication(void); + virtual void AboutRequested(); + +private: + BluetoothWindow *fWindow; + +}; + +#endif diff --git a/src/preferences/bluetooth/BluetoothSettingsView.cpp b/src/preferences/bluetooth/BluetoothSettingsView.cpp new file mode 100644 index 0000000000..9baec7229d --- /dev/null +++ b/src/preferences/bluetooth/BluetoothSettingsView.cpp @@ -0,0 +1,232 @@ +/* + * Copyright 2008-09, Oliver Ruiz Dorantes, + * All rights reserved. Distributed under the terms of the MIT License. + */ +#include "BluetoothSettingsView.h" + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include "ExtendedLocalDeviceView.h" + +#include "BluetoothWindow.h" + +static const int32 kMsgSetAntialiasing = 'anti'; +static const int32 kMsgSetHinting = 'hint'; +static const int32 kMsgSetAverageWeight = 'afEa'; +static const int32 kMsgLocalSwitched = 'lDsW'; + +static const char* kAllLabel = "From all devices"; +static const char* kTrustedLabel = "Only from Trusted devices"; +static const char* kAlwaysLabel = "Always ask"; + +static const char* kDesktopLabel = "Desktop"; +static const char* kLaptopLabel = "Laptop"; +static const char* kPhoneLabel = "Haiku Phone"; + + +// #pragma mark - + +BluetoothSettingsView::BluetoothSettingsView(const char* name) + : BView(name, 0) +{ + // antialiasing menu + _BuildConnectionPolicy(); + fAntialiasingMenuField = new BMenuField("antialiasing", + "Incoming connections policy:", fAntialiasingMenu, NULL); + + fAverageWeightControl = new BSlider("averageWeightControl", + "Default Inquiry time:", new BMessage(kMsgSetAverageWeight), 0, 255, B_HORIZONTAL); + fAverageWeightControl->SetLimitLabels("15 secs", "61 secs"); + fAverageWeightControl->SetHashMarks(B_HASH_MARKS_BOTTOM); + fAverageWeightControl->SetHashMarkCount(255 / 15); + fAverageWeightControl->SetEnabled(true); + + // hinting menu + _BuildHintingMenu(); + fHintingMenuField = new BMenuField("hinting", "Identify host as:", + fHintingMenu, NULL); + + // localdevices menu + _BuildLocalDevicesMenu(); + fLocalDevicesMenuField = new BMenuField("devices", "Local Devices found on system:", + fLocalDevicesMenu, NULL); + + fExtDeviceView = new ExtendedLocalDeviceView(BRect(0,0,5,5), NULL); + + SetLayout(new BGroupLayout(B_VERTICAL)); + + // controls pane + AddChild(BGridLayoutBuilder(10, 10) + + .Add(fHintingMenuField->CreateLabelLayoutItem(), 0, 0) + .Add(fHintingMenuField->CreateMenuBarLayoutItem(), 1, 0) + + .Add(fAntialiasingMenuField->CreateLabelLayoutItem(), 0, 1) + .Add(fAntialiasingMenuField->CreateMenuBarLayoutItem(), 1, 1) + + .Add(BSpaceLayoutItem::CreateGlue(), 0, 2, 2) + + .Add(fAverageWeightControl, 0, 3, 2) + .Add(BSpaceLayoutItem::CreateGlue(), 0, 4, 2) + + .Add(fLocalDevicesMenuField->CreateLabelLayoutItem(), 0, 5) + .Add(fLocalDevicesMenuField->CreateMenuBarLayoutItem(), 1, 5) + + .Add(fExtDeviceView, 0, 6, 2) + .Add(BSpaceLayoutItem::CreateGlue(), 0, 7, 2) + + .SetInsets(10, 10, 10, 10) + ); + +} + + +BluetoothSettingsView::~BluetoothSettingsView() +{ + +} + + +void +BluetoothSettingsView::AttachedToWindow() +{ + if (Parent() != NULL) + SetViewColor(Parent()->ViewColor()); + else + SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR)); + + fAntialiasingMenu->SetTargetForItems(this); + fHintingMenu->SetTargetForItems(this); + fLocalDevicesMenu->SetTargetForItems(this); + fAverageWeightControl->SetTarget(this); +} + + +void +BluetoothSettingsView::MessageReceived(BMessage *msg) +{ + switch (msg->what) { + case kMsgSetAntialiasing: + { +/* bool subpixelAntialiasing; + if (msg->FindBool("antialiasing", &subpixelAntialiasing) != B_OK + || subpixelAntialiasing == fCurrentSubpixelAntialiasing) + break; + fCurrentSubpixelAntialiasing = subpixelAntialiasing; + fAverageWeightControl->SetEnabled(fCurrentSubpixelAntialiasing); + + Window()->PostMessage(kMsgUpdate); +*/ break; + } + case kMsgSetHinting: + { +/* bool hinting; + if (msg->FindBool("hinting", &hinting) != B_OK + || hinting == fCurrentHinting) + break; + fCurrentHinting = hinting; + + Window()->PostMessage(kMsgUpdate); +*/ break; + } + case kMsgLocalSwitched: + { + LocalDevice* lDevice; + if (msg->FindPointer("LocalDevice", (void**) &lDevice) == B_OK) { + // Device integrity should be rechecked + fExtDeviceView->SetLocalDevice(lDevice); + } + break; + } + default: + BView::MessageReceived(msg); + } +} + + +void +BluetoothSettingsView::_BuildConnectionPolicy() +{ + fAntialiasingMenu = new BPopUpMenu("Policy..."); + + BMessage* message = new BMessage(kMsgSetAntialiasing); + message->AddBool("antialiasing", false); + + BMenuItem* item = new BMenuItem(kAllLabel, message); + + fAntialiasingMenu->AddItem(item); + + message = new BMessage(kMsgSetAntialiasing); + message->AddBool("antialiasing", true); + + item = new BMenuItem(kTrustedLabel, message); + + fAntialiasingMenu->AddItem(item); + + BMenuItem* item2 = new BMenuItem(kAlwaysLabel, NULL); + + fAntialiasingMenu->AddItem(item2); + +} + + +void +BluetoothSettingsView::_BuildHintingMenu() +{ + fHintingMenu = new BPopUpMenu("Identify us as..."); + + BMessage* message = new BMessage(kMsgSetHinting); + message->AddBool("hinting", false); + + BMenuItem* item = new BMenuItem(kDesktopLabel, message); + + fHintingMenu->AddItem(item); + + message = new BMessage(kMsgSetAverageWeight); + message->AddBool("hinting", true); + + item = new BMenuItem(kLaptopLabel, message); + + fHintingMenu->AddItem(item); + + BMenuItem* item2 = new BMenuItem(kPhoneLabel, NULL); + fHintingMenu->AddItem(item2); + +} + + +void +BluetoothSettingsView::_BuildLocalDevicesMenu() +{ + LocalDevice* lDevice; + + fLocalDevicesMenu = new BPopUpMenu("Pick LocalDevice..."); + + for (uint32 index = 0 ; index < LocalDevice::GetLocalDeviceCount() ; index++) { + + lDevice = LocalDevice::GetLocalDevice(); + if (lDevice != NULL) { + BMessage* message = new BMessage(kMsgLocalSwitched); + message->AddPointer("LocalDevice", lDevice); + + BMenuItem* item = new BMenuItem((lDevice->GetFriendlyName().String()), message); + fLocalDevicesMenu->AddItem(item); + } + } +} + + + diff --git a/src/preferences/bluetooth/BluetoothSettingsView.h b/src/preferences/bluetooth/BluetoothSettingsView.h new file mode 100644 index 0000000000..006ff4a710 --- /dev/null +++ b/src/preferences/bluetooth/BluetoothSettingsView.h @@ -0,0 +1,57 @@ +/* + * Copyright 2008-09, Oliver Ruiz Dorantes, + * All rights reserved. Distributed under the terms of the MIT License. + */ +#ifndef ANTIALIASING_SETTINGS_VIEW_H +#define ANTIALIASING_SETTINGS_VIEW_H + + +#include + +class BBox; +class BMenuField; +class BPopUpMenu; +class BSlider; + +class ExtendedLocalDeviceView; + +class BluetoothSettingsView : public BView { +public: + BluetoothSettingsView(const char* name); + virtual ~BluetoothSettingsView(); + + virtual void AttachedToWindow(); + virtual void MessageReceived(BMessage* message); + + +private: + void _BuildConnectionPolicy(); + void _SetCurrentAntialiasing(); + void _BuildHintingMenu(); + void _SetCurrentHinting(); + void _SetCurrentAverageWeight(); + void _BuildLocalDevicesMenu(); + +protected: + float fDivider; + + BMenuField* fAntialiasingMenuField; + BPopUpMenu* fAntialiasingMenu; + BMenuField* fHintingMenuField; + BPopUpMenu* fHintingMenu; + BMenuField* fLocalDevicesMenuField; + BPopUpMenu* fLocalDevicesMenu; + + ExtendedLocalDeviceView* fExtDeviceView; + + BSlider* fAverageWeightControl; + + bool fSavedSubpixelAntialiasing; + bool fCurrentSubpixelAntialiasing; + bool fSavedHinting; + bool fCurrentHinting; + unsigned char fSavedAverageWeight; + unsigned char fCurrentAverageWeight; +}; + +#endif // ANTIALIASING_SETTINGS_VIEW_H diff --git a/src/preferences/bluetooth/BluetoothWindow.cpp b/src/preferences/bluetooth/BluetoothWindow.cpp new file mode 100644 index 0000000000..a7d2d80710 --- /dev/null +++ b/src/preferences/bluetooth/BluetoothWindow.cpp @@ -0,0 +1,123 @@ +/* + * Copyright 2008-09, Oliver Ruiz Dorantes, + * All rights reserved. Distributed under the terms of the MIT License. + */ +#include "BluetoothWindow.h" + + +#include +#include +#include +#include +#include + + +#include "RemoteDevicesView.h" + +//#include "ConnChanView.h" +#include "defs.h" + +static const uint32 kMsgSetDefaults = 'dflt'; +static const uint32 kMsgRevert = 'rvrt'; + +static const uint32 kMsgStartServices = 'SrSR'; +static const uint32 kMsgStopServices = 'StST'; +static const uint32 kMsgShowDebug = 'ShDG'; + + +BluetoothWindow::BluetoothWindow(BRect frame) + : BWindow(frame, "Bluetooth", B_TITLED_WINDOW, + B_NOT_ZOOMABLE | B_AUTO_UPDATE_SIZE_LIMITS, + B_ALL_WORKSPACES) +{ + SetLayout(new BGroupLayout(B_HORIZONTAL)); + + fDefaultsButton = new BButton("defaults", "Defaults", + new BMessage(kMsgSetDefaults), B_WILL_DRAW); + + fRevertButton = new BButton("revert", "Revert", + new BMessage(kMsgRevert), B_WILL_DRAW); + + // Add the menu bar + fMenubar = new BMenuBar(Bounds(), "menu_bar"); + + // Add File menu to menu bar + BMenu *menu = new BMenu("Server"); + menu->AddItem(new BMenuItem("Start Bluetooth Services" B_UTF8_ELLIPSIS, new BMessage(kMsgStartServices), 0)); + menu->AddItem(new BMenuItem("Stop Bluetooth Services" B_UTF8_ELLIPSIS, new BMessage(kMsgStopServices), 0)); + menu->AddSeparatorItem(); + menu->AddItem(new BMenuItem("Show Bluetooth console" B_UTF8_ELLIPSIS, new BMessage(kMsgStartServices), 0)); + fMenubar->AddItem(menu); + + menu = new BMenu("View"); + menu->AddItem(new BMenuItem("Connections & Channels list" B_UTF8_ELLIPSIS, NULL, 0)); + menu->AddItem(new BMenuItem("Remote Devices List" B_UTF8_ELLIPSIS, NULL, 0)); + fMenubar->AddItem(menu); + + menu = new BMenu("Help"); + menu->AddItem(new BMenuItem("About" B_UTF8_ELLIPSIS, new BMessage(B_ABOUT_REQUESTED), 0)); + fMenubar->AddItem(menu); + + BTabView* tabView = new BTabView("tabview", B_WIDTH_FROM_LABEL); + + fSettingsView = new BluetoothSettingsView("Settings"); +// fConnChan = new ConnChanView("Connections & Channels", B_WILL_DRAW); + fRemoteDevices = new RemoteDevicesView("Remote Devices", B_WILL_DRAW); + + tabView->AddTab(fRemoteDevices); +// tabView->AddTab(fConnChan); + tabView->AddTab(fSettingsView); + + + fRevertButton->SetEnabled(false); + + AddChild(BGroupLayoutBuilder(B_VERTICAL, 0) + .Add(fMenubar) + .Add(BSpaceLayoutItem::CreateVerticalStrut(5)) + .Add(tabView) + .Add(BSpaceLayoutItem::CreateVerticalStrut(5)) + .Add(BGroupLayoutBuilder(B_HORIZONTAL, 0) + .Add(fRevertButton) + .AddGlue() + .Add(fDefaultsButton) + ) + .SetInsets(5, 5, 5, 5) + ); +} + + +void +BluetoothWindow::MessageReceived(BMessage *message) +{ + switch (message->what) { + case kMsgSetDefaults: +/* fColorsView -> MessageReceived(new BMessage(DEFAULT_SETTINGS)); + fAntialiasingSettings->SetDefaults(); + fDefaultsButton->SetEnabled(false); + fRevertButton->SetEnabled(true); +*/ break; + + case kMsgRevert: +/* fColorsView -> MessageReceived(new BMessage(REVERT_SETTINGS)); + fAntialiasingSettings->Revert(); + fDefaultsButton->SetEnabled(fColorsView->IsDefaultable() + || fAntialiasingSettings->IsDefaultable()); + fRevertButton->SetEnabled(false); +*/ break; + case B_ABOUT_REQUESTED: + be_app->PostMessage(message); + break; + default: + BWindow::MessageReceived(message); + break; + } +} + + + +bool +BluetoothWindow::QuitRequested(void) +{ + be_app->PostMessage(B_QUIT_REQUESTED); + return true; +} diff --git a/src/preferences/bluetooth/BluetoothWindow.h b/src/preferences/bluetooth/BluetoothWindow.h new file mode 100644 index 0000000000..24e299a60d --- /dev/null +++ b/src/preferences/bluetooth/BluetoothWindow.h @@ -0,0 +1,38 @@ +/* + * Copyright 2008-09, Oliver Ruiz Dorantes, + * All rights reserved. Distributed under the terms of the MIT License. + */ +#ifndef BLUETOOTH_WINDOW_H +#define BLUETOOTH_WINDOW_H + +#include +#include +#include +#include +#include + + +#include "BluetoothSettingsView.h" + +class RemoteDevicesView; +class ConnChanView; + +class BluetoothWindow : public BWindow +{ +public: + BluetoothWindow(BRect frame); + bool QuitRequested(void); + void MessageReceived(BMessage *message); + +private: + RemoteDevicesView* fRemoteDevices; + ConnChanView* fConnChan; + BButton* fDefaultsButton; + BButton* fRevertButton; + BMenuBar* fMenubar; + + BluetoothSettingsView* fSettingsView; + +}; + +#endif diff --git a/src/preferences/bluetooth/ExtendedLocalDeviceView.cpp b/src/preferences/bluetooth/ExtendedLocalDeviceView.cpp new file mode 100644 index 0000000000..1e235327f5 --- /dev/null +++ b/src/preferences/bluetooth/ExtendedLocalDeviceView.cpp @@ -0,0 +1,122 @@ +/* + * Copyright 2008-09, Oliver Ruiz Dorantes, + * All rights reserved. Distributed under the terms of the MIT License. + */ +#include "ExtendedLocalDeviceView.h" + +#include + +#include "defs.h" + +#include +#include +#include +#include +#include + + +ExtendedLocalDeviceView::ExtendedLocalDeviceView(BRect frame, LocalDevice* bDevice, uint32 resizingMode, uint32 flags) + : BView(frame,"ExtendedLocalDeviceView", resizingMode, flags | B_WILL_DRAW), + fDevice(bDevice), + fScanMode(0) +{ + SetViewColor(B_TRANSPARENT_COLOR); + SetLowColor(0,0,0); + BRect iDontCare(0,0,0,0); + + SetLayout(new BGroupLayout(B_HORIZONTAL)); + + fDeviceView = new BluetoothDeviceView(BRect(0,0,5,5), bDevice); + + fDiscoverable = new BCheckBox(iDontCare, "Discoverable","Discoverable", new BMessage(SET_DISCOVERABLE)); + fVisible = new BCheckBox(iDontCare, "Visible", "Show Name", new BMessage(SET_VISIBLE)); + + + + AddChild(BGroupLayoutBuilder(B_VERTICAL, 0) + .Add(fDeviceView) + .Add(BGroupLayoutBuilder(B_HORIZONTAL) + .AddGlue() + .Add(fDiscoverable) + .Add(fVisible) + .SetInsets(5, 5, 5, 5) + ) + .Add(BSpaceLayoutItem::CreateVerticalStrut(0)) + .SetInsets(5, 5, 5, 5) + ); + +} + + +ExtendedLocalDeviceView::~ExtendedLocalDeviceView(void) +{ + +} + + +void +ExtendedLocalDeviceView::SetLocalDevice(LocalDevice* lDevice) +{ + if (lDevice != NULL) { + fDevice = lDevice; + SetName(lDevice->GetFriendlyName().String()); + fDeviceView->SetBluetoothDevice(lDevice); + } +} + + +void +ExtendedLocalDeviceView::AttachedToWindow() +{ + fDiscoverable->SetTarget(this); + fVisible->SetTarget(this); +} + + +void +ExtendedLocalDeviceView::SetTarget(BHandler *tgt) +{ + +} + + +void +ExtendedLocalDeviceView::MessageReceived(BMessage *msg) +{ + if(msg->WasDropped()) { + + } + + switch(msg->what) + { + case SET_DISCOVERABLE: + case SET_VISIBLE: + fScanMode = 0; + + if (fDiscoverable->Value()) { + fScanMode = 1; + fVisible->SetEnabled(true); + } else { + fVisible->SetValue(false); + fVisible->SetEnabled(false); + } + + if (fVisible->Value()) + fScanMode |= 2; + + fDevice->SetDiscoverable(fScanMode); + + break; + + default: + BView::MessageReceived(msg); + break; + } +} + + +void +ExtendedLocalDeviceView::SetEnabled(bool value) +{ + +} diff --git a/src/preferences/bluetooth/ExtendedLocalDeviceView.h b/src/preferences/bluetooth/ExtendedLocalDeviceView.h new file mode 100644 index 0000000000..d8b8c3717e --- /dev/null +++ b/src/preferences/bluetooth/ExtendedLocalDeviceView.h @@ -0,0 +1,48 @@ +/* + * Copyright 2008-09, Oliver Ruiz Dorantes, + * All rights reserved. Distributed under the terms of the MIT License. + */ +#ifndef EXTENDEDLOCALDEVICEVIEW_H_ +#define EXTENDEDLOCALDEVICEVIEW_H_ + +#include +#include +#include +#include +#include + +#include + +#include "BluetoothDeviceView.h" + +class BStringView; +class BitmapView; +class BCheckBox; + +class ExtendedLocalDeviceView : public BView +{ +public: + ExtendedLocalDeviceView(BRect frame, LocalDevice* bDevice, + uint32 resizingMode = B_FOLLOW_LEFT | B_FOLLOW_TOP, + uint32 flags = B_WILL_DRAW); + ~ExtendedLocalDeviceView(void); + + void SetLocalDevice(LocalDevice* lDevice); + + + virtual void MessageReceived(BMessage *msg); + virtual void AttachedToWindow(); + virtual void SetTarget(BHandler *tgt); + virtual void SetEnabled(bool value); + +protected: + LocalDevice* fDevice; + BCheckBox* fDiscoverable; + BCheckBox* fVisible; + BluetoothDeviceView* fDeviceView; + uint8 fScanMode; + +}; + + +#endif diff --git a/src/preferences/bluetooth/InquiryPanel.cpp b/src/preferences/bluetooth/InquiryPanel.cpp new file mode 100644 index 0000000000..1f9d10148b --- /dev/null +++ b/src/preferences/bluetooth/InquiryPanel.cpp @@ -0,0 +1,171 @@ +/* + * Copyright 2008-09, Oliver Ruiz Dorantes, + * All rights reserved. Distributed under the terms of the MIT License. + */ +#include "BluetoothWindow.h" + +#include +#include +#include +#include +#include +#include + + +#include "RemoteDevicesView.h" + +//#include "ConnChanView.h" +#include "defs.h" + +static const uint32 kMsgSetDefaults = 'dflt'; +static const uint32 kMsgRevert = 'rvrt'; + +static const uint32 kMsgStartServices = 'SrSR'; +static const uint32 kMsgStopServices = 'StST'; +static const uint32 kMsgShowDebug = 'ShDG'; + + +BluetoothWindow::BluetoothWindow(BRect frame) + : BWindow(frame, "Bluetooth", B_TITLED_WINDOW, + B_NOT_ZOOMABLE | B_AUTO_UPDATE_SIZE_LIMITS, + B_ALL_WORKSPACES) +{ + SetLayout(new BGroupLayout(B_HORIZONTAL)); + + fDefaultsButton = new BButton("defaults", "Defaults", + new BMessage(kMsgSetDefaults), B_WILL_DRAW); + + fRevertButton = new BButton("revert", "Revert", + new BMessage(kMsgRevert), B_WILL_DRAW); + + // Add the menu bar + fMenubar = new BMenuBar(Bounds(), "menu_bar"); + + // Add File menu to menu bar + BMenu *menu = new BMenu("Server"); + menu->AddItem(new BMenuItem("Start Bluetooth Services" B_UTF8_ELLIPSIS, new BMessage(kMsgStartServices), 0)); + menu->AddItem(new BMenuItem("Stop Bluetooth Services" B_UTF8_ELLIPSIS, new BMessage(kMsgStopServices), 0)); + menu->AddSeparatorItem(); + menu->AddItem(new BMenuItem("Show Bluetooth console" B_UTF8_ELLIPSIS, new BMessage(kMsgStartServices), 0)); + fMenubar->AddItem(menu); + + menu = new BMenu("View"); + menu->AddItem(new BMenuItem("Connections & Channels list" B_UTF8_ELLIPSIS, NULL, 0)); + menu->AddItem(new BMenuItem("Remote Devices List" B_UTF8_ELLIPSIS, NULL, 0)); + fMenubar->AddItem(menu); + + menu = new BMenu("Help"); + menu->AddItem(new BMenuItem("About" B_UTF8_ELLIPSIS, new BMessage(B_ABOUT_REQUESTED), 0)); + fMenubar->AddItem(menu); + + BTabView* tabView = new BTabView("tabview", B_WIDTH_FROM_LABEL); + + fSettingsView = new BluetoothSettingsView("Settings"); +// fConnChan = new ConnChanView("Connections & Channels", B_WILL_DRAW); + fRemoteDevices = new RemoteDevicesView("Remote Devices", B_WILL_DRAW); + + tabView->AddTab(fRemoteDevices); +// tabView->AddTab(fConnChan); + tabView->AddTab(fSettingsView); + + + fRevertButton->SetEnabled(false); + + AddChild(BGroupLayoutBuilder(B_VERTICAL, 0) + .Add(fMenubar) + .Add(BSpaceLayoutItem::CreateVerticalStrut(5)) + .Add(tabView) + .Add(BSpaceLayoutItem::CreateVerticalStrut(5)) + .Add(BGroupLayoutBuilder(B_HORIZONTAL, 0) + .Add(fRevertButton) + .AddGlue() + .Add(fDefaultsButton) + ) + .SetInsets(5, 5, 5, 5) + ); +} + + +void +BluetoothWindow::MessageReceived(BMessage *message) +{ + switch (message->what) { + case kMsgUpdate: +/* fDefaultsButton->SetEnabled(fRemoteDevices->IsDefaultable() + || fAntialiasingSettings->IsDefaultable()); + + fRevertButton->SetEnabled(true);*/ + break; + case kMsgSetDefaults: +/* fColorsView -> MessageReceived(new BMessage(DEFAULT_SETTINGS)); + fAntialiasingSettings->SetDefaults(); + fDefaultsButton->SetEnabled(false); + fRevertButton->SetEnabled(true); +*/ break; + + case kMsgRevert: +/* fColorsView -> MessageReceived(new BMessage(REVERT_SETTINGS)); + fAntialiasingSettings->Revert(); + fDefaultsButton->SetEnabled(fColorsView->IsDefaultable() + || fAntialiasingSettings->IsDefaultable()); + fRevertButton->SetEnabled(false); +*/ break; + case B_ABOUT_REQUESTED: + AboutRequested(); + break; + default: + BWindow::MessageReceived(message); + break; + } +} + +void +BluetoothWindow::AboutRequested() +{ + + (new BAlert("about", "Haiku Bluetooth System, (ARCE) + +Created by Oliver Ruiz Dorantes + +With support of: + - Mika Lindqvist + - Maksym Yevmenkin + +Thanks to the individuals who helped... + +Shipping/donating hardware: + - Henry Jair Abril Florez(el Colombian) + & Stefanie Bartolich + - Dennis d'Entremont + - Luroh + - Pieter Panman + +Economically: + - Karl von Dorf, Andrea Bernardi (OSDrawer), + - Matt M, Doug F, Hubert H, + - Sebastian B, Andrew M, Jared E, + - Frederik H, Tom S, Ferry B, + - Greg G, David F, Richard S, Martin W: + +With patches: + - Fredrik Ekdahl + - Andreas Färber + +Testing: + - Petter H. Juliussen + - Raynald Lesieur + - Adrien Destugues + - Jörg Meyer + +Who gave me all the knowledge: + - the yellowTAB team", "OK"))->Go(); + +} + + +bool +BluetoothWindow::QuitRequested(void) +{ + be_app->PostMessage(B_QUIT_REQUESTED); + return true; +} diff --git a/src/preferences/bluetooth/InquiryPanel.h b/src/preferences/bluetooth/InquiryPanel.h new file mode 100644 index 0000000000..d78993ddf0 --- /dev/null +++ b/src/preferences/bluetooth/InquiryPanel.h @@ -0,0 +1,38 @@ +/* + * Copyright 2008-09, Oliver Ruiz Dorantes, + * All rights reserved. Distributed under the terms of the MIT License. + */ +#ifndef INQUIRY_WINDOW_H +#define INQUIRY_WINDOW_H + +#include +#include +#include +#include +#include + + +#include "InquirySettingsView.h" + +class RemoteDevicesView; +class ConnChanView; + +class InquiryWindow : public BWindow +{ +public: + InquiryWindow(BRect frame); + bool QuitRequested(void); + void MessageReceived(BMessage *message); + +private: + RemoteDevicesView* fRemoteDevices; + ConnChanView* fConnChan; + BButton* fDefaultsButton; + BButton* fRevertButton; + BMenuBar* fMenubar; + +}; + + + +#endif diff --git a/src/preferences/bluetooth/RemoteDevicesView.cpp b/src/preferences/bluetooth/RemoteDevicesView.cpp new file mode 100644 index 0000000000..6ac9453d75 --- /dev/null +++ b/src/preferences/bluetooth/RemoteDevicesView.cpp @@ -0,0 +1,123 @@ +/* + * Copyright 2008-09, Oliver Ruiz Dorantes, + * All rights reserved. Distributed under the terms of the MIT License. + */ +#include "RemoteDevicesView.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "BluetoothWindow.h" +#include "defs.h" + +static const uint32 kMsgAddDevices = 'ddDv'; + + + + +RemoteDevicesView::RemoteDevicesView(const char *name, uint32 flags) + : BView(name, flags) +{ + SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR)); + + BButton* addButton = new BButton(BRect(5,5,5,5), "add", "Add" B_UTF8_ELLIPSIS, + new BMessage(kMsgAddDevices), B_FOLLOW_RIGHT); + + BButton* removeButton = new BButton(BRect(5,5,5,5), "remove", "Remove", + new BMessage(kMsgAddDevices), B_FOLLOW_RIGHT); + + BButton* trustButton = new BButton(BRect(5,5,5,5), "trust", "As Trusted", + new BMessage(kMsgAddDevices), B_FOLLOW_RIGHT); + + + BButton* blockButton = new BButton(BRect(5,5,5,5), "trust", "As Blocked", + new BMessage(kMsgAddDevices), B_FOLLOW_RIGHT); + + + BButton* availButton = new BButton(BRect(5,5,5,5), "check", "Refresh" B_UTF8_ELLIPSIS, + new BMessage(kMsgAddDevices), B_FOLLOW_RIGHT); + + + + // Set up list of color attributes + fAttrList = new BListView("AttributeList", B_SINGLE_SELECTION_LIST); + + fScrollView = new BScrollView("ScrollView", fAttrList, 0, false, true); + fScrollView->SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR)); + + SetLayout(new BGroupLayout(B_VERTICAL)); + + // TODO: Make list view and scroller use all the additional height + // available! + AddChild(BGroupLayoutBuilder(B_HORIZONTAL, 10) + .Add(fScrollView) + //.Add(BSpaceLayoutItem::CreateHorizontalStrut(5)) + .Add(BGroupLayoutBuilder(B_VERTICAL) + .Add(addButton) + .Add(removeButton) + .AddGlue() + .Add(availButton) + .AddGlue() + .Add(trustButton) + .Add(blockButton) + .AddGlue() + .SetInsets(0, 15, 0, 15) + ) + .SetInsets(5, 5, 5, 100) + ); + + fAttrList->SetSelectionMessage(new BMessage(ATTRIBUTE_CHOSEN)); +} + +RemoteDevicesView::~RemoteDevicesView(void) +{ + +} + +void +RemoteDevicesView::AttachedToWindow(void) +{ + fAttrList->SetTarget(this); + + LoadSettings(); + fAttrList->Select(0); +} + +void +RemoteDevicesView::MessageReceived(BMessage *msg) +{ + if (msg->WasDropped()) { + rgb_color *color; + ssize_t size; + + if (msg->FindData("RGBColor", (type_code)'RGBC', (const void**)&color, &size) == B_OK) { + + } + } + + switch(msg->what) { + + default: + BView::MessageReceived(msg); + break; + } +} + +void RemoteDevicesView::LoadSettings(void) +{ + +} + +bool RemoteDevicesView::IsDefaultable(void) +{ + return true; +} + diff --git a/src/preferences/bluetooth/RemoteDevicesView.h b/src/preferences/bluetooth/RemoteDevicesView.h new file mode 100644 index 0000000000..b7c98d7baf --- /dev/null +++ b/src/preferences/bluetooth/RemoteDevicesView.h @@ -0,0 +1,48 @@ +/* + * Copyright 2008-09, Oliver Ruiz Dorantes, + * All rights reserved. Distributed under the terms of the MIT License. + */ +#ifndef REMOTE_DEVICES_VIEW_H_ +#define REMOTE_DEVICES_VIEW_H_ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +class RemoteDevicesView : public BView +{ +public: + RemoteDevicesView(const char *name, uint32 flags); + ~RemoteDevicesView(void); + void AttachedToWindow(void); + void MessageReceived(BMessage *msg); + + void LoadSettings(void); + bool IsDefaultable(void); + +protected: + + void SetCurrentColor(rgb_color color); + void UpdateControls(); + void UpdateAllColors(); + + BListView *fAttrList; + BScrollView *fScrollView; + + +}; + +#endif diff --git a/src/preferences/bluetooth/defs.h b/src/preferences/bluetooth/defs.h new file mode 100644 index 0000000000..27fcaf7aec --- /dev/null +++ b/src/preferences/bluetooth/defs.h @@ -0,0 +1,36 @@ +#ifndef DEFS_H_ +#define DEFS_H_ + +// If these paths are changed, ensure that they all end in a '/' character +/* +#define SETTINGS_DIR "/boot/home/config/settings/app_server/" +#define COLOR_SET_DIR "/boot/home/config/settings/color_sets/" +#define CURSOR_SET_DIR "/boot/home/config/settings/cursor_sets/" +#define DECORATORS_DIR "/boot/home/config/add-ons/decorators/" +#define COLOR_SETTINGS_NAME "system_colors" +*/ + +#define BLUETOOTH_APP_SIGNATURE "application/x-vnd.haiku-BluetoothPrefs" + +#define APPLY_SETTINGS 'aply' +#define REVERT_SETTINGS 'rvrt' +#define DEFAULT_SETTINGS 'dflt' +#define TRY_SETTINGS 'trys' + +#define ATTRIBUTE_CHOSEN 'atch' +#define UPDATE_COLOR 'upcl' +#define DECORATOR_CHOSEN 'dcch' +#define UPDATE_DECORATOR 'updc' +#define UPDATE_COLOR_SET 'upcs' + +#define SET_VISIBLE 'sVis' +#define SET_DISCOVERABLE 'sDis' + +#define SET_UI_COLORS 'suic' +#define PREFS_CHOSEN 'prch' + +// user interface +const uint32 kBorderSpace = 10; +const uint32 kItemSpace = 7; + +#endif