Files
haiku-beta6/src/apps/aboutsystem/AboutSystem.cpp
T

735 lines
20 KiB
C++
Raw Normal View History

2005-06-23 18:53:20 +00:00
/*
* Copyright (c) 2005-2007, Haiku, Inc.
2005-06-23 18:53:20 +00:00
* Distributed under the terms of the MIT license.
*
* Author:
* DarkWyrm <[email protected]>
2005-06-23 18:53:20 +00:00
*/
2005-06-24 01:48:44 +00:00
2005-06-23 18:53:20 +00:00
#include <AppFileInfo.h>
#include <Application.h>
#include <Bitmap.h>
#include <File.h>
2005-07-09 20:50:44 +00:00
#include <FindDirectory.h>
2005-06-23 18:53:20 +00:00
#include <Font.h>
#include <MessageRunner.h>
#include <Messenger.h>
#include <OS.h>
2005-07-09 20:50:44 +00:00
#include <Path.h>
#include <Resources.h>
2005-06-23 18:53:20 +00:00
#include <Screen.h>
#include <ScrollView.h>
#include <String.h>
#include <TextView.h>
#include <TranslationUtils.h>
#include <StringView.h>
#include <View.h>
#include <Window.h>
2005-06-24 01:48:44 +00:00
#include <cpu_type.h>
2005-06-23 18:53:20 +00:00
#include <stdio.h>
#include <time.h>
#include <sys/utsname.h>
2005-06-23 18:53:20 +00:00
2005-06-24 01:48:44 +00:00
2005-07-01 13:35:38 +00:00
#define SCROLL_CREDITS_VIEW 'mviv'
2005-06-23 18:53:20 +00:00
2005-06-24 01:48:44 +00:00
static const char *UptimeToString(char string[], size_t size);
static const char *MemUsageToString(char string[], size_t size);
2005-06-23 18:53:20 +00:00
2005-06-24 01:48:44 +00:00
class AboutApp : public BApplication {
public:
AboutApp(void);
2005-06-23 18:53:20 +00:00
};
2005-06-24 01:48:44 +00:00
class AboutWindow : public BWindow {
public:
AboutWindow(void);
bool QuitRequested(void);
2005-06-23 18:53:20 +00:00
};
2005-06-24 01:48:44 +00:00
class AboutView : public BView {
public:
AboutView(const BRect &r);
~AboutView(void);
2005-07-01 13:35:38 +00:00
virtual void AttachedToWindow();
virtual void Pulse();
virtual void FrameResized(float width, float height);
virtual void Draw(BRect update);
virtual void MessageReceived(BMessage *msg);
virtual void MouseDown(BPoint pt);
2005-06-24 01:48:44 +00:00
private:
BStringView *fMemView;
2005-06-24 01:48:44 +00:00
BStringView *fUptimeView;
BView *fInfoView;
BTextView *fCreditsView;
BBitmap *fLogo;
BPoint fDrawPoint;
2005-07-01 13:35:38 +00:00
bigtime_t fLastActionTime;
BMessageRunner *fScrollRunner;
2005-06-23 18:53:20 +00:00
};
2005-06-24 01:48:44 +00:00
// #pragma mark -
2005-06-23 18:53:20 +00:00
AboutApp::AboutApp(void)
: BApplication("application/x-vnd.Haiku-About")
2005-06-23 18:53:20 +00:00
{
2005-06-24 01:48:44 +00:00
AboutWindow *window = new AboutWindow();
window->Show();
2005-06-23 18:53:20 +00:00
}
2005-06-24 01:48:44 +00:00
// #pragma mark -
AboutWindow::AboutWindow()
2007-05-20 17:53:22 +00:00
: BWindow(BRect(0, 0, 500, 300), "About This System", B_TITLED_WINDOW,
2005-06-24 01:48:44 +00:00
B_NOT_RESIZABLE | B_NOT_ZOOMABLE)
2005-06-23 18:53:20 +00:00
{
2005-06-24 01:48:44 +00:00
AddChild(new AboutView(Bounds()));
MoveTo((BScreen().Frame().Width() - Bounds().Width()) / 2,
(BScreen().Frame().Height() - Bounds().Height()) / 2 );
2005-06-23 18:53:20 +00:00
}
2005-06-24 01:48:44 +00:00
2005-06-23 18:53:20 +00:00
bool
2005-06-24 01:48:44 +00:00
AboutWindow::QuitRequested()
2005-06-23 18:53:20 +00:00
{
be_app->PostMessage(B_QUIT_REQUESTED);
return true;
}
AboutView::AboutView(const BRect &rect)
: BView(rect, "aboutview", B_FOLLOW_ALL, B_WILL_DRAW | B_PULSE_NEEDED),
2005-07-01 13:35:38 +00:00
fLastActionTime(system_time()),
fScrollRunner(NULL)
2005-06-23 18:53:20 +00:00
{
2005-06-24 01:56:38 +00:00
fLogo = BTranslationUtils::GetBitmap('PNG ', "haikulogo.png");
2005-06-24 01:48:44 +00:00
if (fLogo) {
fDrawPoint.x = (225-fLogo->Bounds().Width()) / 2;
fDrawPoint.y = 0;
2005-06-23 18:53:20 +00:00
}
2005-06-24 01:48:44 +00:00
2005-06-23 18:53:20 +00:00
// Begin Construction of System Information controls
2005-06-24 01:48:44 +00:00
2005-06-23 18:53:20 +00:00
font_height height;
2005-06-24 01:48:44 +00:00
float labelHeight, textHeight;
system_info systemInfo;
get_system_info(&systemInfo);
2005-06-23 18:53:20 +00:00
be_plain_font->GetHeight(&height);
2005-06-24 01:48:44 +00:00
textHeight = height.ascent + height.descent + height.leading;
2005-06-23 18:53:20 +00:00
be_bold_font->GetHeight(&height);
2005-06-24 01:48:44 +00:00
labelHeight = height.ascent + height.descent + height.leading;
BRect r(0, 0, 225, Bounds().bottom);
if (fLogo)
2005-06-24 01:56:38 +00:00
r.OffsetBy(0, fLogo->Bounds().Height());
2005-06-24 01:48:44 +00:00
fInfoView = new BView(r, "infoview", B_FOLLOW_LEFT | B_FOLLOW_TOP_BOTTOM, B_WILL_DRAW);
2005-06-24 01:48:44 +00:00
fInfoView->SetViewColor(235, 235, 235);
2005-06-23 18:53:20 +00:00
AddChild(fInfoView);
2005-06-24 01:48:44 +00:00
2005-06-23 18:53:20 +00:00
// Add all the various labels for system infomation
2005-06-24 01:48:44 +00:00
BStringView *stringView;
2005-06-23 18:53:20 +00:00
// OS Version
r.Set(5, 5, 224, labelHeight + 5);
2005-06-24 01:48:44 +00:00
stringView = new BStringView(r, "oslabel", "Version:");
stringView->SetFont(be_bold_font);
fInfoView->AddChild(stringView);
2005-07-01 13:35:38 +00:00
stringView->ResizeToPreferred();
2005-06-24 01:48:44 +00:00
2005-07-09 20:50:44 +00:00
// we update "labelHeight" to the actual height of the string view
labelHeight = stringView->Bounds().Height();
2005-06-24 01:48:44 +00:00
r.OffsetBy(0, labelHeight);
r.bottom = r.top + textHeight;
char string[256];
2005-07-09 20:50:44 +00:00
strcpy(string, "Unknown");
2005-06-23 18:53:20 +00:00
// the version is stored in the BEOS:APP_VERSION attribute of libbe.so
2005-07-09 20:50:44 +00:00
BPath path;
if (find_directory(B_BEOS_LIB_DIRECTORY, &path) == B_OK) {
path.Append("libbe.so");
2005-06-24 01:48:44 +00:00
BAppFileInfo appFileInfo;
version_info versionInfo;
2005-07-09 20:50:44 +00:00
BFile file;
if (file.SetTo(path.Path(), B_READ_ONLY) == B_OK
&& appFileInfo.SetTo(&file) == B_OK
&& appFileInfo.GetVersionInfo(&versionInfo, B_APP_VERSION_KIND) == B_OK
&& versionInfo.short_info[0] != '\0')
2005-06-24 01:48:44 +00:00
strcpy(string, versionInfo.short_info);
2005-06-23 18:53:20 +00:00
}
2005-06-24 01:48:44 +00:00
// Add revision from uname() info
utsname unameInfo;
if (uname(&unameInfo) == 0) {
long revision;
if (sscanf(unameInfo.version, "r%ld", &revision) == 1) {
char version[16];
snprintf(version, sizeof(version), "%ld", revision);
strlcat(string, " (Revision ", sizeof(string));
strlcat(string, version, sizeof(string));
strlcat(string, ")", sizeof(string));
}
}
2005-06-24 01:48:44 +00:00
stringView = new BStringView(r, "ostext", string);
fInfoView->AddChild(stringView);
2005-07-01 13:35:38 +00:00
stringView->ResizeToPreferred();
2005-06-24 01:48:44 +00:00
2005-06-23 18:53:20 +00:00
// CPU count, type and clock speed
2005-06-24 01:48:44 +00:00
r.OffsetBy(0, textHeight * 1.5);
r.bottom = r.top + labelHeight;
if (systemInfo.cpu_count > 1)
sprintf(string, "%ld Processors:", systemInfo.cpu_count);
2005-06-23 18:53:20 +00:00
else
2005-06-24 01:48:44 +00:00
strcpy(string, "Processor:");
stringView = new BStringView(r, "cpulabel", string);
2005-06-24 01:48:44 +00:00
stringView->SetFont(be_bold_font);
fInfoView->AddChild(stringView);
2005-07-01 13:35:38 +00:00
stringView->ResizeToPreferred();
2005-06-24 01:48:44 +00:00
BString cpuType;
cpuType << get_cpu_vendor_string(systemInfo.cpu_type)
<< " " << get_cpu_model_string(&systemInfo);
2005-06-24 01:48:44 +00:00
r.OffsetBy(0, labelHeight);
r.bottom = r.top + textHeight;
stringView = new BStringView(r, "cputext", cpuType.String());
fInfoView->AddChild(stringView);
2005-07-01 13:35:38 +00:00
stringView->ResizeToPreferred();
2005-06-24 01:48:44 +00:00
r.OffsetBy(0, textHeight);
2005-06-24 01:48:44 +00:00
r.bottom = r.top + textHeight;
int32 clockSpeed = get_rounded_cpu_speed();
if (clockSpeed < 1000)
sprintf(string,"%ld MHz", clockSpeed);
2005-06-23 18:53:20 +00:00
else
sprintf(string,"%.2f GHz", clockSpeed / 1000.0f);
2005-06-24 01:48:44 +00:00
stringView = new BStringView(r, "mhztext", string);
fInfoView->AddChild(stringView);
2005-07-01 13:35:38 +00:00
stringView->ResizeToPreferred();
2005-06-24 01:48:44 +00:00
2005-06-23 18:53:20 +00:00
// RAM
2005-06-24 01:48:44 +00:00
r.OffsetBy(0, textHeight * 1.5);
r.bottom = r.top + labelHeight;
stringView = new BStringView(r, "ramlabel", "Memory:");
stringView->SetFont(be_bold_font);
fInfoView->AddChild(stringView);
2005-07-01 13:35:38 +00:00
stringView->ResizeToPreferred();
2005-06-24 01:48:44 +00:00
r.OffsetBy(0, labelHeight);
r.bottom = r.top + textHeight;
fMemView = new BStringView(r, "ramtext", "");
fInfoView->AddChild(fMemView);
//fMemView->ResizeToPreferred();
fMemView->SetText(MemUsageToString(string, sizeof(string)));
2005-06-24 01:48:44 +00:00
2005-06-23 18:53:20 +00:00
// Kernel build time/date
2005-06-24 01:48:44 +00:00
r.OffsetBy(0, textHeight * 1.5);
r.bottom = r.top + labelHeight;
stringView = new BStringView(r, "kernellabel", "Kernel:");
stringView->SetFont(be_bold_font);
fInfoView->AddChild(stringView);
2005-07-01 13:35:38 +00:00
stringView->ResizeToPreferred();
2005-06-24 01:48:44 +00:00
r.OffsetBy(0, labelHeight);
r.bottom = r.top + textHeight;
snprintf(string, sizeof(string), "%s %s",
systemInfo.kernel_build_date, systemInfo.kernel_build_time);
2005-06-24 01:48:44 +00:00
stringView = new BStringView(r, "kerneltext", string);
fInfoView->AddChild(stringView);
2005-07-01 13:35:38 +00:00
stringView->ResizeToPreferred();
2005-06-24 01:48:44 +00:00
2005-06-23 18:53:20 +00:00
// Uptime
2005-06-24 01:48:44 +00:00
r.OffsetBy(0, textHeight * 1.5);
r.bottom = r.top + labelHeight;
stringView = new BStringView(r, "uptimelabel", "Time Running:");
stringView->SetFont(be_bold_font);
fInfoView->AddChild(stringView);
2005-07-01 13:35:38 +00:00
stringView->ResizeToPreferred();
2005-06-23 18:53:20 +00:00
2005-06-24 01:48:44 +00:00
r.OffsetBy(0, labelHeight);
r.bottom = r.top + textHeight;
2005-07-09 20:50:44 +00:00
2005-06-24 01:48:44 +00:00
fUptimeView = new BStringView(r, "uptimetext", "");
2005-06-23 18:53:20 +00:00
fInfoView->AddChild(fUptimeView);
2005-07-09 20:50:44 +00:00
// string width changes, so we don't do ResizeToPreferred()
fUptimeView->SetText(UptimeToString(string, sizeof(string)));
2005-07-01 13:35:38 +00:00
2005-06-23 18:53:20 +00:00
// Begin construction of the credits view
2005-06-24 01:48:44 +00:00
r = Bounds();
r.left += fInfoView->Bounds().right + 1;
2005-06-23 18:53:20 +00:00
r.right -= B_V_SCROLL_BAR_WIDTH;
2005-06-24 01:48:44 +00:00
fCreditsView = new BTextView(r, "credits",
r.OffsetToCopy(0, 0).InsetByCopy(5, 5), B_FOLLOW_ALL);
fCreditsView->SetFlags(fCreditsView->Flags() | B_FRAME_EVENTS );
fCreditsView->SetStylable(true);
fCreditsView->MakeEditable(false);
fCreditsView->SetWordWrap(true);
2005-06-24 01:48:44 +00:00
BScrollView *creditsScroller = new BScrollView("creditsScroller",
fCreditsView, B_FOLLOW_ALL, B_WILL_DRAW | B_FRAME_EVENTS, false, true, B_PLAIN_BORDER);
2005-06-23 18:53:20 +00:00
AddChild(creditsScroller);
2005-06-24 01:48:44 +00:00
rgb_color darkgrey = { 100, 100, 100, 255 };
rgb_color haikuGreen = { 42, 131, 36, 255 };
rgb_color haikuOrange = { 255, 69, 0, 255 };
rgb_color haikuYellow = { 255, 176, 0, 255 };
rgb_color linkBlue = { 80, 80, 200, 255 };
2005-06-24 01:48:44 +00:00
2005-06-23 18:53:20 +00:00
BFont font(be_bold_font);
font.SetSize(font.Size() + 4);
2005-06-24 01:48:44 +00:00
fCreditsView->SetFontAndColor(&font, B_FONT_ALL, &haikuGreen);
2005-06-23 18:53:20 +00:00
fCreditsView->Insert("Haiku\n");
2005-06-24 01:48:44 +00:00
font.SetSize(be_bold_font->Size());
2005-06-23 18:53:20 +00:00
font.SetFace(B_BOLD_FACE | B_ITALIC_FACE);
2005-06-24 01:48:44 +00:00
time_t time = ::time(NULL);
struct tm* tm = localtime(&time);
int32 year = tm->tm_year + 1900;
if (year < 2007)
year = 2007;
snprintf(string, sizeof(string),
"Copyright " B_UTF8_COPYRIGHT "2001-%ld Haiku, Inc.\n", year);
fCreditsView->SetFontAndColor(be_plain_font, B_FONT_ALL, &darkgrey);
fCreditsView->Insert(string);
2005-06-24 01:48:44 +00:00
fCreditsView->SetFontAndColor(be_plain_font, B_FONT_ALL, &linkBlue);
fCreditsView->Insert("http://haiku-os.org\n\n");
fCreditsView->SetFontAndColor(&font, B_FONT_ALL, &haikuOrange);
2005-06-23 18:53:20 +00:00
fCreditsView->Insert("Team Leads:\n");
2005-06-24 01:48:44 +00:00
fCreditsView->SetFontAndColor(be_plain_font, B_FONT_ALL, &darkgrey);
2005-06-23 18:53:20 +00:00
fCreditsView->Insert(
2005-06-24 01:48:44 +00:00
"Axel Dörfler\n"
"Phil Greenway\n"
"Philippe Houdoin\n"
"Waldemar Kornewald\n"
2005-06-24 01:48:44 +00:00
"Marcus Overhagen\n"
"Michael Pfeiffer\n"
"Ingo Weinhold\n"
"Jonathan Yoder\n"
2005-06-24 01:48:44 +00:00
"\n");
fCreditsView->SetFontAndColor(&font, B_FONT_ALL, &haikuOrange);
2005-06-23 18:53:20 +00:00
fCreditsView->Insert("Developers:\n");
2005-06-24 01:48:44 +00:00
fCreditsView->SetFontAndColor(be_plain_font, B_FONT_ALL, &darkgrey);
2005-06-23 18:53:20 +00:00
fCreditsView->Insert(
2005-06-24 01:48:44 +00:00
"Stephan Aßmus\n"
"Andrew Bachmann\n"
"Stefano Ceccherini\n"
"Rudolf Cornelissen\n"
"Jérôme Duval\n"
2005-10-24 15:30:48 +00:00
"Waldemar Kornewald\n"
2005-06-24 02:00:26 +00:00
"Thomas Kurschel\n"
"Ryan Leavengood\n"
"Michael Lotz\n"
2005-06-24 01:48:44 +00:00
"Niels Reedijk\n"
2007-04-10 16:20:40 +00:00
"Hugo Santos\n"
"Bryan Varner\n"
2005-06-24 01:48:44 +00:00
"\n");
fCreditsView->SetFontAndColor(&font, B_FONT_ALL, &haikuOrange);
2005-06-23 18:53:20 +00:00
fCreditsView->Insert("Contributors:\n");
2005-06-24 01:48:44 +00:00
fCreditsView->SetFontAndColor(be_plain_font, B_FONT_ALL, &darkgrey);
2005-06-23 18:53:20 +00:00
fCreditsView->Insert(
"Bruno G. Albuquerque\n"
"Andrea Anzani\n"
2005-06-24 01:48:44 +00:00
"Bruce Cameron\n"
2006-04-03 09:56:03 +00:00
"Greg Crain\n"
2005-06-24 01:48:44 +00:00
"Tyler Dauwalder\n"
"Oliver Ruiz Dorantes\n"
"John Drinkwater\n"
"Cian Duffy\n"
"Marc Flerackers\n"
"Daniel Furrer\n"
"Troeglazov Gerasim\n"
"Matthijs Hollemans\n"
"Morgan Howe\n"
2005-06-24 01:48:44 +00:00
"Erik Jaesler\n"
"Carwyn Jones\n"
"Vasilis Kaoutsis\n"
"Euan Kirkhope\n"
"Marcin Konicki\n"
"Kurtis Kopf\n"
2005-06-24 01:48:44 +00:00
"Elad Lahav\n"
"Santiago Lema\n"
"Oscar Lesta\n"
2005-06-24 01:48:44 +00:00
"Jerome Leveque\n"
"Graham MacDonald\n"
"Jorge G. Mare\n"
2005-06-24 01:48:44 +00:00
"Brian Matzon\n"
"Christopher ML Zumwalt May\n"
"Andrew McCall\n"
"David McPaul\n"
"Misza\n"
"MrSiggler\n"
"Alan Murta\n"
"Frans Van Nispen\n"
"Adi Oanca\n"
2005-06-24 01:48:44 +00:00
"Pahtz\n"
"Michael Paine\n"
2005-06-24 01:48:44 +00:00
"Michael Phipps\n"
"Jeremy Rand\n"
"Hartmut Reh\n"
"David Reid\n"
2005-06-24 01:48:44 +00:00
"Daniel Reinhold\n"
"François Revol\n"
"Samuel Rodriguez Perez\n"
2005-06-24 02:00:26 +00:00
"Thomas Roell\n"
"Rafael Romo\n"
"Reznikov Sergei\n"
2005-06-24 01:48:44 +00:00
"Zousar Shaker\n"
"Jonas Sundström\n"
2005-06-24 01:48:44 +00:00
"Daniel Switkin\n"
"Atsushi Takamatsu\n"
"Oliver Tappe\n"
2005-06-24 01:48:44 +00:00
"Jason Vandermark\n"
"Sandor Vroemisse\n"
"Nathan Whitehorn\n"
"Michael Wilber\n"
2005-06-24 01:48:44 +00:00
"Ulrich Wimboeck\n"
"Gabe Yoder\n"
"Łukasz Zemczak\n"
"Siarzhuk Zharski\n"
"\n" B_UTF8_ELLIPSIS " and probably some more we forgot to mention (sorry!)"
"\n\n");
2005-06-24 01:48:44 +00:00
fCreditsView->SetFontAndColor(&font, B_FONT_ALL, &haikuOrange);
2005-06-23 18:53:20 +00:00
fCreditsView->Insert("Special Thanks To:\n");
2005-06-24 01:48:44 +00:00
fCreditsView->SetFontAndColor(be_plain_font, B_FONT_ALL, &darkgrey);
fCreditsView->Insert("Travis Geiselbrecht (and his NewOS kernel)\n");
2005-06-24 01:48:44 +00:00
fCreditsView->Insert("Michael Phipps (project founder)\n\n");
font.SetSize(be_bold_font->Size() + 4);
2005-06-23 18:53:20 +00:00
font.SetFace(B_BOLD_FACE);
fCreditsView->SetFontAndColor(&font, B_FONT_ALL, &haikuGreen);
2005-06-23 18:53:20 +00:00
fCreditsView->Insert("\nCopyrights\n\n");
font.SetSize(be_bold_font->Size());
font.SetFace(B_BOLD_FACE | B_ITALIC_FACE);
2005-06-24 01:48:44 +00:00
// GNU copyrights
fCreditsView->SetFontAndColor(&font, B_FONT_ALL, &haikuYellow);
fCreditsView->Insert("The GNU Project\n");
fCreditsView->SetFontAndColor(be_plain_font, B_FONT_ALL, &darkgrey);
fCreditsView->Insert("Contains software from the GNU Project, "
"released under the GPL and LGPL licences:\n");
fCreditsView->Insert(" - GNU C Library,\n");
fCreditsView->Insert(" - GNU coretools, diffutils, findutils, gawk, bison, m4, make,\n");
fCreditsView->Insert(" - Bourne Again Shell.\n");
fCreditsView->Insert("Copyright " B_UTF8_COPYRIGHT " The Free Software Foundation.\n");
fCreditsView->SetFontAndColor(be_plain_font, B_FONT_ALL, &linkBlue);
fCreditsView->Insert("www.gnu.org\n\n");
// FFMpeg copyrights
fCreditsView->SetFontAndColor(&font, B_FONT_ALL, &haikuYellow);
fCreditsView->Insert("FFMpeg libavcodec\n");
fCreditsView->SetFontAndColor(be_plain_font, B_FONT_ALL, &darkgrey);
fCreditsView->Insert("Copyright " B_UTF8_COPYRIGHT " 2000-2007 Fabrice Bellard, et al.\n");
fCreditsView->SetFontAndColor(be_plain_font, B_FONT_ALL, &linkBlue);
fCreditsView->Insert("www.ffmpeg.org\n\n");
// AGG copyrights
fCreditsView->SetFontAndColor(&font, B_FONT_ALL, &haikuYellow);
2005-06-23 18:53:20 +00:00
fCreditsView->Insert("AntiGrain Geometry\n");
fCreditsView->SetFontAndColor(be_plain_font, B_FONT_ALL, &darkgrey);
fCreditsView->Insert("Copyright " B_UTF8_COPYRIGHT " 2002-2006 Maxim Shemanarev (McSeem).\n");
fCreditsView->SetFontAndColor(be_plain_font, B_FONT_ALL, &linkBlue);
fCreditsView->Insert("www.antigrain.com\n\n");
2005-06-24 01:48:44 +00:00
// PDFLib copyrights
fCreditsView->SetFontAndColor(&font, B_FONT_ALL, &haikuYellow);
2005-06-23 18:53:20 +00:00
fCreditsView->Insert("PDFLib\n");
fCreditsView->SetFontAndColor(be_plain_font, B_FONT_ALL, &darkgrey);
2005-06-24 01:48:44 +00:00
fCreditsView->Insert(
"Copyright " B_UTF8_COPYRIGHT " 1997-2006 PDFlib GmbH and Thomas Merz. "
2005-06-24 01:48:44 +00:00
"All rights reserved.\n"
"PDFlib and the PDFlib logo are registered trademarks of PDFlib GmbH.\n");
fCreditsView->SetFontAndColor(be_plain_font, B_FONT_ALL, &linkBlue);
fCreditsView->Insert("www.pdflib.com\n\n");
2005-06-24 01:48:44 +00:00
// FreeType copyrights
fCreditsView->SetFontAndColor(&font, B_FONT_ALL, &haikuYellow);
2005-06-23 18:53:20 +00:00
fCreditsView->Insert("FreeType2\n");
fCreditsView->SetFontAndColor(be_plain_font, B_FONT_ALL, &darkgrey);
fCreditsView->Insert("Portions of this software are copyright " B_UTF8_COPYRIGHT " 1996-2006 The FreeType"
" Project. All rights reserved.\n");
fCreditsView->SetFontAndColor(be_plain_font, B_FONT_ALL, &linkBlue);
fCreditsView->Insert("www.freetype.org\n\n");
2005-06-26 22:07:18 +00:00
// Mesa3D (http://www.mesa3d.org) copyrights
fCreditsView->SetFontAndColor(&font, B_FONT_ALL, &haikuYellow);
2005-06-26 22:07:18 +00:00
fCreditsView->Insert("Mesa\n");
fCreditsView->SetFontAndColor(be_plain_font, B_FONT_ALL, &darkgrey);
2005-06-26 22:07:18 +00:00
fCreditsView->Insert(
"Copyright " B_UTF8_COPYRIGHT " 1999-2006 Brian Paul. "
"Mesa3D project. All rights reserved.\n");
fCreditsView->SetFontAndColor(be_plain_font, B_FONT_ALL, &linkBlue);
fCreditsView->Insert("www.mesa3d.org\n\n");
2005-06-26 22:07:18 +00:00
// SGI's GLU implementation copyrights
fCreditsView->SetFontAndColor(&font, B_FONT_ALL, &haikuYellow);
2005-06-26 22:07:18 +00:00
fCreditsView->Insert("GLU\n");
fCreditsView->SetFontAndColor(be_plain_font, B_FONT_ALL, &darkgrey);
2005-06-26 22:07:18 +00:00
fCreditsView->Insert(
"Copyright " B_UTF8_COPYRIGHT " 1991-2000 Silicon Graphics, Inc. "
"SGI's Software FreeB license. All rights reserved.\n\n");
2005-06-26 22:07:18 +00:00
// GLUT implementation copyrights
fCreditsView->SetFontAndColor(&font, B_FONT_ALL, &haikuYellow);
2005-06-26 22:07:18 +00:00
fCreditsView->Insert("GLUT\n");
fCreditsView->SetFontAndColor(be_plain_font, B_FONT_ALL, &darkgrey);
2005-06-26 22:07:18 +00:00
fCreditsView->Insert(
"Copyright " B_UTF8_COPYRIGHT " 1994-1997 Mark Kilgard. "
2005-06-26 22:07:18 +00:00
"All rights reserved.\n"
"Copyright " B_UTF8_COPYRIGHT " 1997 Be Inc.\n"
"Copyright " B_UTF8_COPYRIGHT " 1999 Jake Hamby. \n\n");
2005-07-12 09:17:44 +00:00
// Konatu font
fCreditsView->SetFontAndColor(&font, B_FONT_ALL, &haikuYellow);
2005-07-12 09:17:44 +00:00
fCreditsView->Insert("Konatu font\n");
fCreditsView->SetFontAndColor(be_plain_font, B_FONT_ALL, &darkgrey);
fCreditsView->Insert(
"Copyright " B_UTF8_COPYRIGHT " 2002- MASUDA mitiya.\n"
2005-07-12 09:17:44 +00:00
"MIT license. All rights reserved.\n\n");
// expat copyrights
fCreditsView->SetFontAndColor(&font, B_FONT_ALL, &haikuYellow);
fCreditsView->Insert("expat\n");
fCreditsView->SetFontAndColor(be_plain_font, B_FONT_ALL, &darkgrey);
fCreditsView->Insert(
"Copyright " B_UTF8_COPYRIGHT " 1998, 1999, 2000 Thai Open Source Software Center Ltd and Clark Cooper.\n"
"Copyright " B_UTF8_COPYRIGHT " 2001, 2002, 2003 Expat maintainers.\n\n");
// zlib copyrights
fCreditsView->SetFontAndColor(&font, B_FONT_ALL, &haikuYellow);
fCreditsView->Insert("zlib\n");
fCreditsView->SetFontAndColor(be_plain_font, B_FONT_ALL, &darkgrey);
fCreditsView->Insert(
"Copyright " B_UTF8_COPYRIGHT " 1995-2004 Jean-loup Gailly and Mark Adler.\n\n");
// zip copyrights
fCreditsView->SetFontAndColor(&font, B_FONT_ALL, &haikuYellow);
fCreditsView->Insert("Info-ZIP\n");
fCreditsView->SetFontAndColor(be_plain_font, B_FONT_ALL, &darkgrey);
fCreditsView->Insert(
"Copyright " B_UTF8_COPYRIGHT " 1990-2002 Info-ZIP. All rights reserved.\n\n");
// bzip2 copyrights
fCreditsView->SetFontAndColor(&font, B_FONT_ALL, &haikuYellow);
fCreditsView->Insert("bzip2\n");
fCreditsView->SetFontAndColor(be_plain_font, B_FONT_ALL, &darkgrey);
fCreditsView->Insert(
"Copyright " B_UTF8_COPYRIGHT " 1996-2005 Julian R Seward. All rights reserved.\n\n");
// VIM copyrights
fCreditsView->SetFontAndColor(&font, B_FONT_ALL, &haikuYellow);
fCreditsView->Insert("Vi IMproved\n");
fCreditsView->SetFontAndColor(be_plain_font, B_FONT_ALL, &darkgrey);
fCreditsView->Insert(
"Copyright " B_UTF8_COPYRIGHT " Bram Moolenaar et al.\n\n");
2005-06-23 18:53:20 +00:00
}
2005-06-24 01:48:44 +00:00
2005-06-23 18:53:20 +00:00
AboutView::~AboutView(void)
{
2005-07-01 13:35:38 +00:00
delete fScrollRunner;
2005-06-23 18:53:20 +00:00
}
2005-06-24 01:48:44 +00:00
2005-06-23 18:53:20 +00:00
void
AboutView::AttachedToWindow(void)
{
2005-07-01 13:35:38 +00:00
BView::AttachedToWindow();
2005-06-23 18:53:20 +00:00
Window()->SetPulseRate(500000);
2005-07-01 13:35:38 +00:00
SetEventMask(B_POINTER_EVENTS);
2005-06-23 18:53:20 +00:00
}
2005-06-24 01:48:44 +00:00
2005-06-23 18:53:20 +00:00
void
AboutView::MouseDown(BPoint pt)
{
2005-06-24 01:48:44 +00:00
BRect r(92, 26, 105, 31);
if (r.Contains(pt))
2005-06-23 18:53:20 +00:00
printf("Easter Egg\n");
2005-07-01 13:35:38 +00:00
if (Bounds().Contains(pt)) {
fLastActionTime = system_time();
delete fScrollRunner;
fScrollRunner = NULL;
}
2005-06-23 18:53:20 +00:00
}
2005-07-01 13:35:38 +00:00
void
AboutView::FrameResized(float width, float height)
{
BRect r = fCreditsView->Bounds();
r.OffsetTo(B_ORIGIN);
r.InsetBy(3, 3);
fCreditsView->SetTextRect(r);
}
2005-06-24 01:48:44 +00:00
2005-06-23 18:53:20 +00:00
void
AboutView::Draw(BRect update)
{
2005-06-24 01:48:44 +00:00
if (fLogo)
DrawBitmap(fLogo, fDrawPoint);
2005-06-23 18:53:20 +00:00
}
2005-06-24 01:48:44 +00:00
2005-06-23 18:53:20 +00:00
void
AboutView::Pulse(void)
{
char string[255];
fUptimeView->SetText(UptimeToString(string, sizeof(string)));
fMemView->SetText(MemUsageToString(string, sizeof(string)));
2005-07-01 13:35:38 +00:00
if (fScrollRunner == NULL && (system_time() > fLastActionTime + 10000000)) {
BMessage message(SCROLL_CREDITS_VIEW);
//fScrollRunner = new BMessageRunner(this, &message, 300000, -1);
2005-07-01 13:35:38 +00:00
}
2005-06-23 18:53:20 +00:00
}
2005-06-24 01:48:44 +00:00
2005-06-23 18:53:20 +00:00
void
AboutView::MessageReceived(BMessage *msg)
{
2005-06-24 01:48:44 +00:00
switch (msg->what) {
2005-07-01 13:35:38 +00:00
case SCROLL_CREDITS_VIEW:
{
BScrollBar *scrollBar = fCreditsView->ScrollBar(B_VERTICAL);
if (scrollBar == NULL)
break;
float max, min;
scrollBar->GetRange(&min, &max);
if (scrollBar->Value() < max)
fCreditsView->ScrollBy(0, 5);
2005-06-23 18:53:20 +00:00
break;
2005-07-01 13:35:38 +00:00
}
2005-06-23 18:53:20 +00:00
default:
BView::MessageReceived(msg);
2005-07-01 13:35:38 +00:00
break;
2005-06-23 18:53:20 +00:00
}
}
2005-06-24 01:48:44 +00:00
// #pragma mark -
static const char *
MemUsageToString(char string[], size_t size)
{
system_info systemInfo;
if (get_system_info(&systemInfo) < B_OK)
return "Unknown";
snprintf(string, size, "%d MB total, %d MB used (%d%%)",
int(systemInfo.max_pages / 256.0f + 0.5f),
int(systemInfo.used_pages / 256.0f + 0.5f),
int(100 * systemInfo.used_pages / systemInfo.max_pages));
return string;
}
static const char *
UptimeToString(char string[], size_t size)
2005-06-23 18:53:20 +00:00
{
int64 days, hours, minutes, seconds, remainder;
int64 systime = system_time();
2005-06-24 01:48:44 +00:00
days = systime / 86400000000LL;
remainder = systime % 86400000000LL;
hours = remainder / 3600000000LL;
remainder = remainder % 3600000000LL;
minutes = remainder / 60000000;
remainder = remainder % 60000000;
seconds = remainder / 1000000;
char *str = string;
if (days) {
str += snprintf(str, size, "%lld day%s",days, days > 1 ? "s" : "");
}
if (hours) {
str += snprintf(str, size - strlen(string), "%s%lld hour%s",
str != string ? ", " : "",
hours, hours > 1 ? "s" : "");
}
if (minutes) {
str += snprintf(str, size - strlen(string), "%s%lld minute%s",
str != string ? ", " : "",
minutes, minutes > 1 ? "s" : "");
2005-06-23 18:53:20 +00:00
}
if (seconds || str == string) {
// Haiku would be well-known to boot very fast.
// Let's be ready to handle below minute uptime, zero second included ;-)
str += snprintf(str, size - strlen(string), "%s%lld second%s",
str != string ? ", " : "",
seconds, seconds > 1 ? "s" : "");
}
2005-06-24 01:48:44 +00:00
2005-06-23 18:53:20 +00:00
return string;
}
2005-06-24 01:48:44 +00:00
int
main()
{
AboutApp app;
app.Run();
return 0;
}