////////////////////////////////////////////////// // Blabber [SendTalkWindow.cpp] ////////////////////////////////////////////////// #include "CustomStatusWindow.h" #include #include #include #include #include #include #include "support/AppLocation.h" #include "ui/PictureView.h" #include "ui/MainWindow.h" #include "BlabberSettings.h" #include "GenericFunctions.h" #include "JabberSpeak.h" #include "Messages.h" CustomStatusWindow *CustomStatusWindow::fInstance = NULL; CustomStatusWindow *CustomStatusWindow::Instance() { if (fInstance == NULL) { float main_window_width = 410; float main_window_height = 100; BRect frame(GenericFunctions::CenteredFrame(main_window_width, main_window_height)); fInstance = new CustomStatusWindow(frame); } return fInstance; } CustomStatusWindow::CustomStatusWindow(BRect frame) : BWindow(frame, "Create a Custom Status", B_TITLED_WINDOW, B_AUTO_UPDATE_SIZE_LIMITS | B_NOT_ZOOMABLE | B_NOT_RESIZABLE) { fChatRadio = new BRadioButton("status", "Chat", NULL); fAwayRadio = new BRadioButton("status", "Away", NULL); fExtendedAwayRadio = new BRadioButton("status", "Extended Away", NULL); fDoNotDisturbRadio = new BRadioButton("status", "Do Not Disturb", NULL); BStringView *queryString = new BStringView(NULL, "Please provide your detailed status:"); // handle fStatus = new BTextControl(NULL, NULL, "", NULL); fStatus->SetDivider(0); if (BlabberSettings::Instance()->Data("last-custom-more-exact-status")) { fStatus->SetText(BlabberSettings::Instance()->Data("last-custom-more-exact-status")); } else { fStatus->SetText("I'm at my computer."); } BButton *cancelButton = new BButton("cancel", "Nevermind", new BMessage(JAB_CANCEL)); cancelButton->SetTarget(this); BButton *okButton = new BButton("ok", "OK", new BMessage(JAB_OK)); okButton->MakeDefault(true); okButton->SetTarget(this); SetLayout(new BGroupLayout(B_HORIZONTAL)); BLayoutBuilder::Group<>(this) .SetInsets(B_USE_WINDOW_SPACING) .AddGroup(B_VERTICAL, B_USE_HALF_ITEM_SPACING, 0) .Add(fChatRadio) .Add(fAwayRadio) .Add(fExtendedAwayRadio) .Add(fDoNotDisturbRadio) .End() .AddGroup(B_VERTICAL, B_USE_ITEM_SPACING, 2) .Add(queryString) .Add(fStatus) .AddGroup(B_HORIZONTAL, B_USE_ITEM_SPACING, 0) .AddGlue() .Add(cancelButton) .Add(okButton) .End() .End() .End(); // set defaults string exact_status; if (BlabberSettings::Instance()->Data("last-custom-exact-status")) { // get last status exact_status = BlabberSettings::Instance()->Data("last-custom-exact-status"); // map to radio buttons if (exact_status == "away") { fAwayRadio->SetValue(1); } else if (exact_status == "xa") { fExtendedAwayRadio->SetValue(1); } else if (exact_status == "dnd") { fDoNotDisturbRadio->SetValue(1); } else { fChatRadio->SetValue(1); } } else { fChatRadio->SetValue(1); } // focus fStatus->MakeFocus(true); } CustomStatusWindow::~CustomStatusWindow() { fInstance = NULL; } void CustomStatusWindow::MessageReceived(BMessage *msg) { switch (msg->what) { //// JAB_OK case JAB_OK: { if (fChatRadio->Value()) { JabberSpeak::Instance()->SendPresence(gloox::Presence::Chat, fStatus->Text()); BlabberSettings::Instance()->SetData("last-custom-exact-status", "chat"); } else if (fAwayRadio->Value()) { JabberSpeak::Instance()->SendPresence(gloox::Presence::Away, fStatus->Text()); BlabberSettings::Instance()->SetData("last-custom-exact-status", "away"); } else if (fExtendedAwayRadio->Value()) { JabberSpeak::Instance()->SendPresence(gloox::Presence::XA, fStatus->Text()); BlabberSettings::Instance()->SetData("last-custom-exact-status", "xa"); } else if (fDoNotDisturbRadio->Value()) { JabberSpeak::Instance()->SendPresence(gloox::Presence::DND, fStatus->Text()); BlabberSettings::Instance()->SetData("last-custom-exact-status", "dnd"); } BlabberSettings::Instance()->SetTag("last-used-custom-status", true); BlabberSettings::Instance()->SetData("last-custom-more-exact-status", fStatus->Text()); BlabberSettings::Instance()->WriteToFile(); // update menu BlabberMainWindow::Instance()->SetCustomStatus(fStatus->Text()); PostMessage(B_QUIT_REQUESTED); break; } //// JAB_CANCEL case JAB_CANCEL: { PostMessage(B_QUIT_REQUESTED); break; } } }