/* * Copyright 2001-2015, Haiku. * Distributed under the terms of the MIT License. * * Authors: * Rafael Romo * Stefano Ceccherini (burton666@libero.it) * Axel Dörfler, axeld@pinc-software.de * Augustin Cavalier */ #include "AlertWindow.h" #include "Constants.h" #include #include #include #include #include #include #undef B_TRANSLATION_CONTEXT #define B_TRANSLATION_CONTEXT "Screen" AlertWindow::AlertWindow(BMessenger handler) : BAlert(B_TRANSLATE("Confirm changes"), "", B_TRANSLATE("Undo"), B_TRANSLATE("Keep")), // we will wait 12 seconds until we send a message fSeconds(12), fHandler(handler) { SetType(B_WARNING_ALERT); SetPulseRate(1000000); TextView()->SetStylable(true); TextView()->GetFontAndColor(0, &fOriginalFont); fFont = fOriginalFont; fFont.SetFace(B_BOLD_FACE); UpdateCountdownView(); } void AlertWindow::DispatchMessage(BMessage* message, BHandler* handler) { if (message->what == B_PULSE) { if (--fSeconds == 0) { fHandler.SendMessage(BUTTON_UNDO_MSG); PostMessage(B_QUIT_REQUESTED); Hide(); } else UpdateCountdownView(); } BAlert::DispatchMessage(message, handler); } void AlertWindow::MessageReceived(BMessage* message) { switch (message->what) { case 'ALTB': // alert button message { int32 which; if (message->FindInt32("which", &which) == B_OK) { if (which == 1) fHandler.SendMessage(MAKE_INITIAL_MSG); else if (which == 0) fHandler.SendMessage(BUTTON_UNDO_MSG); PostMessage(B_QUIT_REQUESTED); Hide(); } break; } case B_KEY_DOWN: { int8 val; if (message->FindInt8("byte", &val) == B_OK && val == B_ESCAPE) { fHandler.SendMessage(BUTTON_UNDO_MSG); PostMessage(B_QUIT_REQUESTED); Hide(); break; } // fall through } default: BAlert::MessageReceived(message); break; } } void AlertWindow::UpdateCountdownView() { BString str1 = B_TRANSLATE("Do you wish to keep these settings?"); BString string = str1; string += "\n"; string += B_TRANSLATE("Settings will revert in %seconds."); BTimeUnitFormat format; BString tmp; format.Format(tmp, fSeconds, B_TIME_UNIT_SECOND); string.ReplaceFirst("%seconds", tmp); // The below is black magic, do not touch. We really need to refactor // BTextView sometime... TextView()->SetFontAndColor(0, str1.Length() + 1, &fOriginalFont, B_FONT_ALL); TextView()->SetText(string.String()); TextView()->SetFontAndColor(0, str1.Length(), &fFont, B_FONT_ALL); }