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
_BZombieReplicantView_(BRect frame,status_t error)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
~_BZombieReplicantView_()44 _BZombieReplicantView_::~_BZombieReplicantView_()
45 {
46 }
47
48
49 void
MessageReceived(BMessage * msg)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
Draw(BRect updateRect)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
MouseDown(BPoint)102 _BZombieReplicantView_::MouseDown(BPoint)
103 {
104 }
105
106
107 status_t
Archive(BMessage * archive,bool) const108 _BZombieReplicantView_::Archive(BMessage* archive, bool) const
109 {
110 *archive = *fArchive;
111
112 return B_OK;
113 }
114
115
116 void
SetArchive(BMessage * archive)117 _BZombieReplicantView_::SetArchive(BMessage* archive)
118 {
119 fArchive = archive;
120 }
121