- Pointer not initialized for LocalDevice Menu (thanks Rene)

- Show Alert when bluetooth_server is not running (work in progress)
- Typos and Style



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34997 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Oliver Ruiz Dorantes
2010-01-10 22:53:00 +00:00
parent 9fe2b96342
commit d9e36ee1c2
5 changed files with 172 additions and 137 deletions
+82 -36
View File
@@ -1,5 +1,5 @@
/*
* Copyright 2008-09, Oliver Ruiz Dorantes, <oliver.ruiz.dorantes_at_gmail.com>
* Copyright 2008-10, Oliver Ruiz Dorantes, <oliver.ruiz.dorantes_at_gmail.com>
* All rights reserved. Distributed under the terms of the MIT License.
*/
#include <stdio.h>
@@ -7,6 +7,8 @@
#include <Alert.h>
#include <Catalog.h>
#include <Locale.h>
#include <MessageRunner.h>
#include <Roster.h>
#include "BluetoothMain.h"
#include "BluetoothWindow.h"
@@ -19,64 +21,108 @@ BluetoothApplication::BluetoothApplication(void)
: BApplication(BLUETOOTH_APP_SIGNATURE)
{
be_locale->GetAppCatalog(&fCatalog);
}
void
BluetoothApplication::ReadyToRun()
{
if (!be_roster->IsRunning(BLUETOOTH_SIGNATURE)) {
int32 choice = (new BAlert("bluetooth_server not running",
"bluetooth_server has not been found running on the system."
"Should be started, or stay offline", "Work offline",
"Quit", "Start please", B_WIDTH_AS_USUAL, B_WARNING_ALERT))->Go();
switch (choice) {
case 1:
PostMessage(B_QUIT_REQUESTED);
return;
case 2:
{
status_t error;
error = be_roster->Launch(BLUETOOTH_SIGNATURE);
printf("kMsgStartServices: %s\n", strerror(error));
// TODO: This is temporal
// BMessage handcheck: use the version of Launch()
// that includes a BMessage in that message include
// a BMessenger to yourself and the BT server could
// use that messenger to send back a reply indicating
// when it's ready and you could just create window
// when you get that
BMessageRunner::StartSending(be_app_messenger,
new BMessage('Xtmp'), 2 * 1000000, 1);
break;
}
default:
PostMessage(new BMessage('Xtmp'));
break;
}
}
fWindow = new BluetoothWindow(BRect(100, 100, 550, 420));
fWindow->Show();
}
void
BluetoothApplication::AboutRequested()
{
(new BAlert("about", TR("Haiku Bluetooth system, (ARCE)\n\n"
"Created by Oliver Ruiz Dorantes\n\n"
"With support of:\n"
" - Mika Lindqvist\n"
" - Maksym Yevmenkin\n\n"
"Thanks to the individuals who helped...\n\n"
"Shipping/donating hardware:\n"
" - Henry Jair Abril Florez (el Colombian)\n"
" & Stefanie Bartolich\n"
" - Edwin Erik Amsler\n"
" - Dennis d'Entremont\n"
" - Luroh\n"
" - Pieter Panman\n\n"
"Economically:\n"
" - Karl vom Dorff, Andrea Bernardi (OSDrawer),\n"
" - Matt M, Doug F, Hubert H,\n"
" - Sebastian B, Andrew M, Jared E,\n"
" - Frederik H, Tom S, Ferry B,\n"
" - Greg G, David F, Richard S, Martin W:\n\n"
"With patches:\n"
" - Michael Weirauch\n"
" - Fredrik Ekdahl\n"
" - Raynald Lesieur\n"
" - Andreas Färber\n"
" - Joerg Meyer\n"
"Testing:\n"
" - Petter H. Juliussen\n"
" - Adrien Destugues\n\n"
"Who gave me all the knowledge:\n"
" - the yellowTAB team"), TR("OK")))->Go();
"Created by Oliver Ruiz Dorantes\n\n"
"With support of:\n"
" - Mika Lindqvist\n"
" - Adrien Destugues\n"
" - Maksym Yevmenkin\n\n"
"Thanks to the individuals who helped...\n\n"
"Shipping/donating hardware:\n"
" - Henry Jair Abril Florez (el Colombian)\n"
" & Stefanie Bartolich\n"
" - Edwin Erik Amsler\n"
" - Dennis d'Entremont\n"
" - Luroh\n"
" - Pieter Panman\n\n"
"Economically:\n"
" - Karl vom Dorff, Andrea Bernardi (OSDrawer),\n"
" - Matt M, Doug F, Hubert H,\n"
" - Sebastian B, Andrew M, Jared E,\n"
" - Frederik H, Tom S, Ferry B,\n"
" - Greg G, David F, Richard S, Martin W:\n\n"
"With patches:\n"
" - Michael Weirauch\n"
" - Fredrik Ekdahl\n"
" - Raynald Lesieur\n"
" - Andreas Färber\n"
" - Joerg Meyer\n"
"Testing:\n"
" - Petter H. Juliussen\n"
"Who gave me all the knowledge:\n"
" - the yellowTAB team"), TR("OK")))->Go();
}
void
BluetoothApplication::MessageReceived(BMessage *message)
BluetoothApplication::MessageReceived(BMessage* message)
{
switch (message->what) {
case kMsgAddToRemoteList:
fWindow->PostMessage(message);
break;
case 'Xtmp':
fWindow = new BluetoothWindow(BRect(100, 100, 550, 420));
fWindow->Show();
break;
default:
BApplication::MessageReceived(message);
}
}
int
main(int, char**)
{
{
BluetoothApplication myApplication;
myApplication.Run();
+6 -5
View File
@@ -9,17 +9,18 @@
class BluetoothWindow;
class BluetoothApplication : public BApplication
class BluetoothApplication : public BApplication
{
public:
BluetoothApplication(void);
virtual void ReadyToRun();
virtual void MessageReceived(BMessage*);
virtual void AboutRequested();
private:
BluetoothWindow *fWindow;
BCatalog fCatalog;
BluetoothWindow* fWindow;
BCatalog fCatalog;
};
@@ -27,7 +27,7 @@
#include "BluetoothWindow.h"
#define TR_CONTEXT "Settings view"
static const int32 kMsgSetAntialiasing = 'anti';
static const int32 kMsgSetDeviceClassDesktop = 'sDCd';
static const int32 kMsgSetDeviceClassServer = 'sDCs';
@@ -52,52 +52,52 @@ static const char* kPhoneLabel = TR_MARK("Smart phone");
// #pragma mark -
BluetoothSettingsView::BluetoothSettingsView(const char* name)
: BView(name, 0)
: BView(name, 0),
fLocalDevicesMenu(NULL)
{
// antialiasing menu
_BuildConnectionPolicy();
fAntialiasingMenuField = new BMenuField("antialiasing",
TR("Incoming connections policy:"), fAntialiasingMenu, NULL);
fPolicyMenuField = new BMenuField("antialiasing",
TR("Incoming connections policy:"), fPolicyMenu, NULL);
fAverageWeightControl = new BSlider("averageWeightControl",
fInquiryTimeControl = new BSlider("time",
TR("Default inquiry time:"), new BMessage(kMsgSetAverageWeight), 0, 255,
B_HORIZONTAL);
fAverageWeightControl->SetLimitLabels(TR("15 secs"), TR("61 secs"));
fAverageWeightControl->SetHashMarks(B_HASH_MARKS_BOTTOM);
fAverageWeightControl->SetHashMarkCount(255 / 15);
fAverageWeightControl->SetEnabled(true);
fInquiryTimeControl->SetLimitLabels(TR("15 secs"), TR("61 secs"));
fInquiryTimeControl->SetHashMarks(B_HASH_MARKS_BOTTOM);
fInquiryTimeControl->SetHashMarkCount(255 / 15);
fInquiryTimeControl->SetEnabled(true);
// hinting menu
_BuildHintingMenu();
fHintingMenuField = new BMenuField("hinting", TR("Identify host as:"),
fHintingMenu, NULL);
_BuildClassMenu();
fClassMenuField = new BMenuField("class", TR("Identify host as:"),
fClassMenu, NULL);
// localdevices menu
_BuildLocalDevicesMenu();
fLocalDevicesMenuField = new BMenuField("devices",
TR("Local devices found on system:"), fLocalDevicesMenu, NULL);
fExtDeviceView = new ExtendedLocalDeviceView(BRect(0,0,5,5), 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(fClassMenuField->CreateLabelLayoutItem(), 0, 0)
.Add(fClassMenuField->CreateMenuBarLayoutItem(), 1, 0)
.Add(fPolicyMenuField->CreateLabelLayoutItem(), 0, 1)
.Add(fPolicyMenuField->CreateMenuBarLayoutItem(), 1, 1)
.Add(fAntialiasingMenuField->CreateLabelLayoutItem(), 0, 1)
.Add(fAntialiasingMenuField->CreateMenuBarLayoutItem(), 1, 1)
.Add(BSpaceLayoutItem::CreateGlue(), 0, 2, 2)
.Add(fAverageWeightControl, 0, 3, 2)
.Add(fInquiryTimeControl, 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)
@@ -121,73 +121,73 @@ BluetoothSettingsView::AttachedToWindow()
else
SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));
fAntialiasingMenu->SetTargetForItems(this);
fHintingMenu->SetTargetForItems(this);
fPolicyMenu->SetTargetForItems(this);
fClassMenu->SetTargetForItems(this);
fLocalDevicesMenu->SetTargetForItems(this);
fAverageWeightControl->SetTarget(this);
fInquiryTimeControl->SetTarget(this);
}
void
BluetoothSettingsView::MessageReceived(BMessage *msg)
BluetoothSettingsView::MessageReceived(BMessage* message)
{
DeviceClass devClass;
switch (msg->what) {
switch (message->what) {
case kMsgLocalSwitched:
{
LocalDevice* lDevice;
if (msg->FindPointer("LocalDevice", (void**) &lDevice) == B_OK) {
if (message->FindPointer("LocalDevice", (void**) &lDevice) == B_OK) {
// Device integrity should be rechecked
fExtDeviceView->SetLocalDevice(lDevice);
fExtDeviceView->SetEnabled(true);
ActiveLocalDevice = lDevice;
ActiveLocalDevice = lDevice;
}
}
break;
case kMsgSetDeviceClassDesktop:
{
{
devClass.SetRecord(1, 1, 0x72);
ActiveLocalDevice->SetDeviceClass(devClass);
break;
}
case kMsgSetDeviceClassServer:
{
{
devClass.SetRecord(1, 2, 0x72);
ActiveLocalDevice->SetDeviceClass(devClass);
break;
}
case kMsgSetDeviceClassLaptop:
{
{
devClass.SetRecord(1, 3, 0x72);
ActiveLocalDevice->SetDeviceClass(devClass);
break;
}
case kMsgSetDeviceClassHandheld:
{
{
devClass.SetRecord(1, 4, 0x72);
ActiveLocalDevice->SetDeviceClass(devClass);
break;
}
case kMsgSetDeviceClassSmartPhone:
{
{
devClass.SetRecord(2, 3, 0x72);
ActiveLocalDevice->SetDeviceClass(devClass);
break;
}
}
case kMsgRefresh:
_BuildLocalDevicesMenu();
fLocalDevicesMenu->SetTargetForItems(this);
break;
default:
BView::MessageReceived(msg);
BView::MessageReceived(message);
}
}
@@ -195,56 +195,55 @@ BluetoothSettingsView::MessageReceived(BMessage *msg)
void
BluetoothSettingsView::_BuildConnectionPolicy()
{
fAntialiasingMenu = new BPopUpMenu(TR("Policy..."));
fPolicyMenu = new BPopUpMenu(TR("Policy..."));
BMessage* message = new BMessage(kMsgSetAntialiasing);
message->AddBool("antialiasing", false);
BMenuItem* item = new BMenuItem(TR(kAllLabel), message);
fAntialiasingMenu->AddItem(item);
fPolicyMenu->AddItem(item);
message = new BMessage(kMsgSetAntialiasing);
message->AddBool("antialiasing", true);
item = new BMenuItem(TR(kTrustedLabel), message);
fAntialiasingMenu->AddItem(item);
fPolicyMenu->AddItem(item);
BMenuItem* item2 = new BMenuItem(TR(kAlwaysLabel), NULL);
fAntialiasingMenu->AddItem(item2);
fPolicyMenu->AddItem(item2);
}
void
BluetoothSettingsView::_BuildHintingMenu()
{
BluetoothSettingsView::_BuildClassMenu()
{
fHintingMenu = new BPopUpMenu(TR("Identify us as..."));
fClassMenu = new BPopUpMenu(TR("Identify us as..."));
BMessage* message;
message = new BMessage(kMsgSetDeviceClassDesktop);
BMenuItem* item = new BMenuItem(TR(kDesktopLabel), message);
fHintingMenu->AddItem(item);
fClassMenu->AddItem(item);
message = new BMessage(kMsgSetDeviceClassServer);
item = new BMenuItem(TR(kServerLabel), message);
fHintingMenu->AddItem(item);
fClassMenu->AddItem(item);
message = new BMessage(kMsgSetDeviceClassLaptop);
item = new BMenuItem(TR(kLaptopLabel), message);
fHintingMenu->AddItem(item);
fClassMenu->AddItem(item);
message = new BMessage(kMsgSetDeviceClassHandheld);
item = new BMenuItem(TR(kHandheldLabel), message);
fHintingMenu->AddItem(item);
fClassMenu->AddItem(item);
message = new BMessage(kMsgSetDeviceClassSmartPhone);
item = new BMenuItem(TR(kPhoneLabel), message);
fHintingMenu->AddItem(item);
fClassMenu->AddItem(item);
}
@@ -257,20 +256,18 @@ BluetoothSettingsView::_BuildLocalDevicesMenu()
if (!fLocalDevicesMenu)
fLocalDevicesMenu = new BPopUpMenu(TR("Pick LocalDevice..."));
for (uint32 index = 0 ; index < LocalDevice::GetLocalDeviceCount() ; index++) {
for (uint32 index = 0; index < LocalDevice::GetLocalDeviceCount(); index++) {
lDevice = LocalDevice::GetLocalDevice();
if (lDevice != NULL) {
// TODO Check if they already exists
lDevice = LocalDevice::GetLocalDevice();
if (lDevice != NULL) {
// TODO Check if they already exists
BMessage* message = new BMessage(kMsgLocalSwitched);
message->AddPointer("LocalDevice", lDevice);
BMenuItem* item = new BMenuItem((lDevice->GetFriendlyName().String()), message);
BMenuItem* item = new BMenuItem((lDevice->GetFriendlyName().String()),
message);
fLocalDevicesMenu->AddItem(item);
}
}
}
}
@@ -26,32 +26,23 @@ public:
private:
void _BuildConnectionPolicy();
void _SetCurrentAntialiasing();
void _BuildHintingMenu();
void _SetCurrentHinting();
void _SetCurrentAverageWeight();
void _BuildClassMenu();
void _BuildLocalDevicesMenu();
protected:
float fDivider;
BMenuField* fAntialiasingMenuField;
BPopUpMenu* fAntialiasingMenu;
BMenuField* fHintingMenuField;
BPopUpMenu* fHintingMenu;
BMenuField* fPolicyMenuField;
BPopUpMenu* fPolicyMenu;
BMenuField* fClassMenuField;
BPopUpMenu* fClassMenu;
BMenuField* fLocalDevicesMenuField;
BPopUpMenu* fLocalDevicesMenu;
ExtendedLocalDeviceView* fExtDeviceView;
BSlider* fAverageWeightControl;
bool fSavedSubpixelAntialiasing;
bool fCurrentSubpixelAntialiasing;
bool fSavedHinting;
bool fCurrentHinting;
unsigned char fSavedAverageWeight;
unsigned char fCurrentAverageWeight;
ExtendedLocalDeviceView* fExtDeviceView;
BSlider* fInquiryTimeControl;
};
#endif // ANTIALIASING_SETTINGS_VIEW_H
@@ -59,14 +59,14 @@ BluetoothWindow::BluetoothWindow(BRect frame)
menu->AddItem(new BMenuItem(TR("Refresh LocalDevices" B_UTF8_ELLIPSIS),
new BMessage(kMsgRefresh), 0));
fMenubar->AddItem(menu);
menu = new BMenu(TR("View"));
menu->AddItem(new BMenuItem(TR("Connections & channels" B_UTF8_ELLIPSIS),
NULL, 0));
menu->AddItem(new BMenuItem(TR("Remote devices list" B_UTF8_ELLIPSIS),
NULL, 0));
fMenubar->AddItem(menu);
menu = new BMenu(TR("Help"));
menu->AddItem(new BMenuItem(TR("About Bluetooth" B_UTF8_ELLIPSIS),
new BMessage(B_ABOUT_REQUESTED), 0));
@@ -122,9 +122,9 @@ BluetoothWindow::MessageReceived(BMessage* message)
printf("kMsgStartServices\n");
if (!be_roster->IsRunning(BLUETOOTH_SIGNATURE)) {
status_t error;
error = be_roster->Launch(BLUETOOTH_SIGNATURE);
printf("kMsgStopServices: %s\n", strerror(error));
printf("kMsgStartServices: %s\n", strerror(error));
}
break;
@@ -132,12 +132,12 @@ BluetoothWindow::MessageReceived(BMessage* message)
printf("kMsgStopServices\n");
if (be_roster->IsRunning(BLUETOOTH_SIGNATURE)) {
status_t error;
error = BMessenger(BLUETOOTH_SIGNATURE).SendMessage(B_QUIT_REQUESTED);
printf("kMsgStopServices: %s\n", strerror(error));
}
break;
case kMsgAddToRemoteList:
PostMessage(message, fRemoteDevices);
break;