* Copyright 2008-10, Oliver Ruiz Dorantes, <oliver.ruiz.dorantes_at_gmail.com>
* All rights reserved. Distributed under the terms of the MIT License.
*/
#include "BluetoothWindow.h"
#include "RemoteDevicesView.h"
#include <Button.h>
#include <Catalog.h>
#include <LayoutBuilder.h>
#include <Messenger.h>
#include <Roster.h>
#include <SeparatorView.h>
#include <TabView.h>
#include <stdio.h>
#include <bluetooth/LocalDevice.h>
#include "defs.h"
#undef B_TRANSLATION_CONTEXT
#define B_TRANSLATION_CONTEXT "Window"
static const uint32 kMsgSetDefaults = 'dflt';
static const uint32 kMsgRevert = 'rvrt';
static const uint32 kMsgStartServices = 'SrSR';
static const uint32 kMsgStopServices = 'StST';
LocalDevice* ActiveLocalDevice = NULL;
BluetoothWindow::BluetoothWindow(BRect frame)
:
BWindow(frame, B_TRANSLATE_SYSTEM_NAME("Bluetooth"), B_TITLED_WINDOW,
B_NOT_ZOOMABLE | B_AUTO_UPDATE_SIZE_LIMITS)
{
fDefaultsButton = new BButton("defaults", B_TRANSLATE("Defaults"),
new BMessage(kMsgSetDefaults), B_WILL_DRAW);
fDefaultsButton->SetEnabled(false);
fRevertButton = new BButton("revert", B_TRANSLATE("Revert"),
new BMessage(kMsgRevert), B_WILL_DRAW);
fRevertButton->SetEnabled(false);
fMenubar = new BMenuBar(Bounds(), "menu_bar");
BMenu* menu = new BMenu(B_TRANSLATE("Server"));
menu->AddItem(new BMenuItem(
B_TRANSLATE("Start bluetooth services" B_UTF8_ELLIPSIS),
new BMessage(kMsgStartServices), 0));
menu->AddItem(new BMenuItem(
B_TRANSLATE("Stop bluetooth services" B_UTF8_ELLIPSIS),
new BMessage(kMsgStopServices), 0));
menu->AddSeparatorItem();
menu->AddItem(new BMenuItem(
B_TRANSLATE("Refresh local devices" B_UTF8_ELLIPSIS),
new BMessage(kMsgRefresh), 0));
fMenubar->AddItem(menu);
menu = new BMenu(B_TRANSLATE("Help"));
menu->AddItem(new BMenuItem(B_TRANSLATE("About Bluetooth" B_UTF8_ELLIPSIS),
new BMessage(B_ABOUT_REQUESTED), 0));
fMenubar->AddItem(menu);
BTabView* tabView = new BTabView("tabview", B_WIDTH_FROM_LABEL);
tabView->SetBorder(B_NO_BORDER);
fSettingsView = new BluetoothSettingsView(B_TRANSLATE("Settings"));
fRemoteDevices = new RemoteDevicesView(
B_TRANSLATE("Remote devices"), B_WILL_DRAW);
tabView->AddTab(fRemoteDevices);
tabView->AddTab(fSettingsView);
BLayoutBuilder::Group<>(this, B_VERTICAL, 0)
.SetInsets(0)
.Add(fMenubar)
.AddStrut(B_USE_HALF_ITEM_SPACING)
.Add(tabView)
.AddStrut(B_USE_HALF_ITEM_SPACING)
.Add(new BSeparatorView(B_HORIZONTAL))
.AddGroup(B_HORIZONTAL)
.SetInsets(B_USE_WINDOW_SPACING, B_USE_DEFAULT_SPACING,
B_USE_WINDOW_SPACING, B_USE_WINDOW_SPACING)
.Add(fDefaultsButton)
.Add(fRevertButton)
.AddGlue()
.End()
.End();
}
void
BluetoothWindow::MessageReceived(BMessage* message)
{
switch (message->what) {
case kMsgSetConnectionPolicy:
case kMsgSetDeviceClass:
fSettingsView->MessageReceived(message);
break;
case kMsgSetDefaults:
fAntialiasingSettings->SetDefaults();
fDefaultsButton->SetEnabled(false);
fRevertButton->SetEnabled(true);
*/ break;
case kMsgRevert:
fAntialiasingSettings->Revert();
fDefaultsButton->SetEnabled(fColorsView->IsDefaultable()
|| fAntialiasingSettings->IsDefaultable());
fRevertButton->SetEnabled(false);
*/ break;
case kMsgStartServices:
if (!be_roster->IsRunning(BLUETOOTH_SIGNATURE)) {
status_t error = be_roster->Launch(BLUETOOTH_SIGNATURE);
printf("kMsgStartServices: %s\n", strerror(error));
}
break;
case kMsgStopServices:
if (be_roster->IsRunning(BLUETOOTH_SIGNATURE)) {
status_t error = BMessenger(BLUETOOTH_SIGNATURE).SendMessage(B_QUIT_REQUESTED);
printf("kMsgStopServices: %s\n", strerror(error));
}
break;
case kMsgAddToRemoteList:
PostMessage(message, fRemoteDevices);
break;
case kMsgRefresh:
fSettingsView->MessageReceived(message);
break;
case B_ABOUT_REQUESTED:
be_app->PostMessage(message);
break;
default:
BWindow::MessageReceived(message);
break;
}
}
bool
BluetoothWindow::QuitRequested()
{
be_app->PostMessage(B_QUIT_REQUESTED);
return true;
}