1 /* 2 * Copyright 2001-2010, Haiku. 3 * Distributed under the terms of the MIT License. 4 * 5 * Authors: 6 * Marc Flerackers (mflerackers@androme.be) 7 */ 8 9 #include <Alert.h> 10 #include <Message.h> 11 #include <MimeType.h> 12 #include <String.h> 13 #include <SystemCatalog.h> 14 15 #include "ZombieReplicantView.h" 16 17 #include <stdio.h> 18 #include <stdlib.h> 19 #include <string.h> 20 #include <new> 21 22 using BPrivate::gSystemCatalog; 23 24 #undef B_TRANSLATION_CONTEXT 25 #define B_TRANSLATION_CONTEXT "ZombieReplicantView" 26 27 #undef B_TRANSLATE 28 #define B_TRANSLATE(str) \ 29 gSystemCatalog.GetString(B_TRANSLATE_MARK(str), "ZombieReplicantView") 30 31 32 _BZombieReplicantView_::_BZombieReplicantView_(BRect frame, status_t error) 33 : 34 BBox(frame, "<Zombie>", B_FOLLOW_NONE, B_WILL_DRAW), 35 fError(error) 36 { 37 BFont font(be_bold_font); 38 font.SetSize(9.0f); // TODO 39 SetFont(&font); 40 SetViewColor(kZombieColor); 41 } 42 43 44 _BZombieReplicantView_::~_BZombieReplicantView_() 45 { 46 } 47 48 49 void 50 _BZombieReplicantView_::MessageReceived(BMessage* msg) 51 { 52 switch (msg->what) { 53 case B_ABOUT_REQUESTED: 54 { 55 const char* addOn = NULL; 56 BString error; 57 if (fArchive->FindString("add_on", &addOn) == B_OK) { 58 char description[B_MIME_TYPE_LENGTH] = ""; 59 BMimeType type(addOn); 60 type.GetShortDescription(description); 61 error = B_TRANSLATE("Cannot create the replicant for " 62 "\"%description\".\n%error"); 63 error.ReplaceFirst("%description", description); 64 } else 65 error = B_TRANSLATE("Cannot locate the application for the " 66 "replicant. No application signature supplied.\n%error"); 67 68 error.ReplaceFirst("%error", strerror(fError)); 69 70 BAlert* alert = new (std::nothrow) BAlert(B_TRANSLATE("Error"), 71 error.String(), B_TRANSLATE("OK"), NULL, NULL, 72 B_WIDTH_AS_USUAL, B_STOP_ALERT); 73 if (alert != NULL) { 74 alert->SetFlags(alert->Flags() | B_CLOSE_ON_ESCAPE); 75 alert->Go(); 76 } 77 78 break; 79 } 80 default: 81 BView::MessageReceived(msg); 82 } 83 } 84 85 86 void 87 _BZombieReplicantView_::Draw(BRect updateRect) 88 { 89 BRect bounds(Bounds()); 90 font_height fh; 91 92 GetFontHeight(&fh); 93 94 DrawChar('?', BPoint(bounds.Width() / 2.0f - StringWidth("?") / 2.0f, 95 bounds.Height() / 2.0f - fh.ascent / 2.0f)); 96 97 BBox::Draw(updateRect); 98 } 99 100 101 void 102 _BZombieReplicantView_::MouseDown(BPoint) 103 { 104 } 105 106 107 status_t 108 _BZombieReplicantView_::Archive(BMessage* archive, bool) const 109 { 110 *archive = *fArchive; 111 112 return B_OK; 113 } 114 115 116 void 117 _BZombieReplicantView_::SetArchive(BMessage* archive) 118 { 119 fArchive = archive; 120 } 121