199f695c9SAxel Dörfler /* 299f695c9SAxel Dörfler * Copyright 2001-2006, Haiku. 399f695c9SAxel Dörfler * Distributed under the terms of the MIT License. 499f695c9SAxel Dörfler * 599f695c9SAxel Dörfler * Authors: 699f695c9SAxel Dörfler * Marc Flerackers (mflerackers@androme.be) 799f695c9SAxel Dörfler */ 899f695c9SAxel Dörfler 999f695c9SAxel Dörfler /*! BStatusBar displays a "percentage-of-completion" gauge. */ 1052a38012Sejakowatz 113583227cSStefano Ceccherini #include <Debug.h> 1252a38012Sejakowatz #include <Message.h> 133583227cSStefano Ceccherini #include <StatusBar.h> 1452a38012Sejakowatz 1599f695c9SAxel Dörfler #include <stdlib.h> 1699f695c9SAxel Dörfler #include <string.h> 1799f695c9SAxel Dörfler 1852a38012Sejakowatz 1952a38012Sejakowatz BStatusBar::BStatusBar(BRect frame, const char *name, const char *label, 2052a38012Sejakowatz const char *trailingLabel) 21eb997429SMarc Flerackers : BView(frame, name, B_FOLLOW_LEFT | B_FOLLOW_TOP, B_WILL_DRAW), 225e959958SStefano Ceccherini fLabel(NULL), 235e959958SStefano Ceccherini fTrailingLabel(NULL), 2452a38012Sejakowatz fText(NULL), 2552a38012Sejakowatz fTrailingText(NULL), 2652a38012Sejakowatz fMax(100.0f), 2752a38012Sejakowatz fCurrent(0.0f), 2852a38012Sejakowatz fBarHeight(-1.0f), 2952a38012Sejakowatz fTrailingWidth(-1.0f), 3052a38012Sejakowatz fEraseText(-1.0f), 3152a38012Sejakowatz fEraseTrailingText(-1.0f), 3252a38012Sejakowatz fCustomBarHeight(false) 3352a38012Sejakowatz 3452a38012Sejakowatz { 353583227cSStefano Ceccherini // TODO: Move initializer list and other stuff to InitObject 363583227cSStefano Ceccherini InitObject(label, trailingLabel); 3752a38012Sejakowatz 38*30d24296SMarcus Overhagen fBarColor.set_to(50, 150, 255, 255); 3952a38012Sejakowatz } 403583227cSStefano Ceccherini 413583227cSStefano Ceccherini 4252a38012Sejakowatz BStatusBar::BStatusBar(BMessage *archive) 4352a38012Sejakowatz : BView(archive), 445e959958SStefano Ceccherini fLabel(NULL), 455e959958SStefano Ceccherini fTrailingLabel(NULL), 46679d063bSStefano Ceccherini fText(NULL), 47679d063bSStefano Ceccherini fTrailingText(NULL), 48679d063bSStefano Ceccherini fMax(100.0f), 49679d063bSStefano Ceccherini fCurrent(0.0f), 50679d063bSStefano Ceccherini fBarHeight(-1.0f), 5152a38012Sejakowatz fTrailingWidth(-1.0f), 5252a38012Sejakowatz fEraseText(-1.0f), 5352a38012Sejakowatz fEraseTrailingText(-1.0f), 5452a38012Sejakowatz fCustomBarHeight(false) 5552a38012Sejakowatz { 563583227cSStefano Ceccherini const char *label = NULL; 573583227cSStefano Ceccherini const char *trailingLabel = NULL; 583583227cSStefano Ceccherini archive->FindString("_label", &label); 593583227cSStefano Ceccherini archive->FindString("_tlabel", &trailingLabel); 603583227cSStefano Ceccherini 613583227cSStefano Ceccherini InitObject(label, trailingLabel); 623583227cSStefano Ceccherini 6352a38012Sejakowatz if (archive->FindFloat("_high", &fBarHeight) != B_OK) 6452a38012Sejakowatz fBarHeight = -1.0f; 6552a38012Sejakowatz 66*30d24296SMarcus Overhagen if (archive->FindInt32("_bcolor", (int32 *)&fBarColor) < B_OK) 67*30d24296SMarcus Overhagen fBarColor.set_to(50, 150, 255, 255); 6852a38012Sejakowatz 693583227cSStefano Ceccherini if (archive->FindFloat("_val", &fCurrent) < B_OK) 7052a38012Sejakowatz fCurrent = 0.0f; 7152a38012Sejakowatz 723583227cSStefano Ceccherini if (archive->FindFloat("_max", &fMax) < B_OK) 7352a38012Sejakowatz fMax = 100.0f; 7452a38012Sejakowatz 7552a38012Sejakowatz const char *string; 7652a38012Sejakowatz 773583227cSStefano Ceccherini if (archive->FindString("_text", &string) < B_OK) 7852a38012Sejakowatz fText = NULL; 7952a38012Sejakowatz else 8052a38012Sejakowatz fText = strdup(string); 8152a38012Sejakowatz 823583227cSStefano Ceccherini if (archive->FindString("_ttext", &string) < B_OK) 8352a38012Sejakowatz fTrailingText = NULL; 8452a38012Sejakowatz else 8552a38012Sejakowatz fTrailingText = strdup(string); 8652a38012Sejakowatz 8752a38012Sejakowatz } 883583227cSStefano Ceccherini 893583227cSStefano Ceccherini 9052a38012Sejakowatz BStatusBar::~BStatusBar() 9152a38012Sejakowatz { 92eb997429SMarc Flerackers free(fLabel); 93eb997429SMarc Flerackers free(fTrailingLabel); 94eb997429SMarc Flerackers free(fText); 95eb997429SMarc Flerackers free(fTrailingText); 9652a38012Sejakowatz } 973583227cSStefano Ceccherini 983583227cSStefano Ceccherini 993583227cSStefano Ceccherini BArchivable * 1003583227cSStefano Ceccherini BStatusBar::Instantiate(BMessage *archive) 10152a38012Sejakowatz { 10252a38012Sejakowatz if (validate_instantiation(archive, "BStatusBar")) 10352a38012Sejakowatz return new BStatusBar(archive); 10452a38012Sejakowatz 10552a38012Sejakowatz return NULL; 10652a38012Sejakowatz } 1073583227cSStefano Ceccherini 1083583227cSStefano Ceccherini 1093583227cSStefano Ceccherini status_t 1103583227cSStefano Ceccherini BStatusBar::Archive(BMessage *archive, bool deep) const 11152a38012Sejakowatz { 1128f3e1554SMarc Flerackers status_t err = BView::Archive(archive, deep); 1138f3e1554SMarc Flerackers 1143583227cSStefano Ceccherini if (err < B_OK) 1158f3e1554SMarc Flerackers return err; 11652a38012Sejakowatz 11752a38012Sejakowatz if (fBarHeight != 16.0f) 1188f3e1554SMarc Flerackers err = archive->AddFloat("_high", fBarHeight); 1198f3e1554SMarc Flerackers 1203583227cSStefano Ceccherini if (err < B_OK) 1218f3e1554SMarc Flerackers return err; 12252a38012Sejakowatz 123b56e4e65SDarkWyrm // DW: I'm pretty sure we don't need to compare the color with (50, 150, 255) ? 124*30d24296SMarcus Overhagen err = archive->AddInt32("_bcolor", (const uint32 &)fBarColor); 1258f3e1554SMarc Flerackers 1263583227cSStefano Ceccherini if (err < B_OK) 1278f3e1554SMarc Flerackers return err; 12852a38012Sejakowatz 12952a38012Sejakowatz if (fCurrent != 0.0f) 1308f3e1554SMarc Flerackers err = archive->AddFloat("_val", fCurrent); 1318f3e1554SMarc Flerackers 1323583227cSStefano Ceccherini if (err < B_OK) 1338f3e1554SMarc Flerackers return err; 13452a38012Sejakowatz 13552a38012Sejakowatz if (fMax != 100.0f ) 1368f3e1554SMarc Flerackers err = archive->AddFloat("_max", fMax); 1378f3e1554SMarc Flerackers 1383583227cSStefano Ceccherini if (err < B_OK) 1398f3e1554SMarc Flerackers return err; 14052a38012Sejakowatz 14152a38012Sejakowatz if (fText ) 1428f3e1554SMarc Flerackers err = archive->AddString("_text", fText); 1438f3e1554SMarc Flerackers 1443583227cSStefano Ceccherini if (err < B_OK) 1458f3e1554SMarc Flerackers return err; 14652a38012Sejakowatz 14752a38012Sejakowatz if (fTrailingText) 1488f3e1554SMarc Flerackers err = archive->AddString("_ttext", fTrailingText); 1498f3e1554SMarc Flerackers 1503583227cSStefano Ceccherini if (err < B_OK) 1518f3e1554SMarc Flerackers return err; 15252a38012Sejakowatz 15352a38012Sejakowatz if (fLabel) 1548f3e1554SMarc Flerackers err = archive->AddString("_label", fLabel); 1558f3e1554SMarc Flerackers 1563583227cSStefano Ceccherini if (err < B_OK) 1578f3e1554SMarc Flerackers return err; 15852a38012Sejakowatz 15952a38012Sejakowatz if (fTrailingLabel) 1608f3e1554SMarc Flerackers err = archive->AddString ("_tlabel", fTrailingLabel); 16152a38012Sejakowatz 1628f3e1554SMarc Flerackers return err; 16352a38012Sejakowatz } 1643583227cSStefano Ceccherini 1653583227cSStefano Ceccherini 1663583227cSStefano Ceccherini void 1673583227cSStefano Ceccherini BStatusBar::AttachedToWindow() 16852a38012Sejakowatz { 16952a38012Sejakowatz float width, height; 17052a38012Sejakowatz GetPreferredSize(&width, &height); 17152a38012Sejakowatz ResizeTo(Frame().Width(), height); 17252a38012Sejakowatz 1733583227cSStefano Ceccherini if (Parent()) { 17452a38012Sejakowatz SetViewColor(Parent()->ViewColor()); 175b7b28df0Shaydentech SetLowColor(Parent()->ViewColor()); 176b7b28df0Shaydentech } 17752a38012Sejakowatz } 1783583227cSStefano Ceccherini 1793583227cSStefano Ceccherini 1803583227cSStefano Ceccherini void 1813583227cSStefano Ceccherini BStatusBar::MessageReceived(BMessage *message) 18252a38012Sejakowatz { 1833583227cSStefano Ceccherini switch(message->what) { 18452a38012Sejakowatz case B_UPDATE_STATUS_BAR: 18552a38012Sejakowatz { 18652a38012Sejakowatz float delta; 18752a38012Sejakowatz const char *text = NULL, *trailing_text = NULL; 18852a38012Sejakowatz 18952a38012Sejakowatz message->FindFloat("delta", &delta); 19052a38012Sejakowatz message->FindString("text", &text); 191ec053666SStefano Ceccherini message->FindString("trailing_text", &trailing_text); 19252a38012Sejakowatz 19352a38012Sejakowatz Update(delta, text, trailing_text); 19452a38012Sejakowatz 19552a38012Sejakowatz break; 19652a38012Sejakowatz } 1973583227cSStefano Ceccherini 19852a38012Sejakowatz case B_RESET_STATUS_BAR: 19952a38012Sejakowatz { 20052a38012Sejakowatz const char *label = NULL, *trailing_label = NULL; 20152a38012Sejakowatz 20252a38012Sejakowatz message->FindString("label", &label); 203ec053666SStefano Ceccherini message->FindString("trailing_label", &trailing_label); 20452a38012Sejakowatz 20552a38012Sejakowatz Reset(label, trailing_label); 20652a38012Sejakowatz 20752a38012Sejakowatz break; 20852a38012Sejakowatz } 2093583227cSStefano Ceccherini 21052a38012Sejakowatz default: 21152a38012Sejakowatz BView::MessageReceived(message); 2123583227cSStefano Ceccherini break; 21352a38012Sejakowatz } 21452a38012Sejakowatz } 2153583227cSStefano Ceccherini 2163583227cSStefano Ceccherini 2173583227cSStefano Ceccherini void 2183583227cSStefano Ceccherini BStatusBar::Draw(BRect updateRect) 21952a38012Sejakowatz { 22052a38012Sejakowatz float width = Frame().Width(); 22152a38012Sejakowatz font_height fh; 22252a38012Sejakowatz GetFontHeight(&fh); 22352a38012Sejakowatz 22452a38012Sejakowatz SetHighColor(0, 0, 0); 2250dc199a5SMarc Flerackers MovePenTo(2.0f, (float)ceil(fh.ascent) + 1.0f); 2260dc199a5SMarc Flerackers 2270dc199a5SMarc Flerackers if (fLabel) 2280dc199a5SMarc Flerackers DrawString(fLabel); 2290dc199a5SMarc Flerackers if (fText) 2300dc199a5SMarc Flerackers DrawString(fText); 2310dc199a5SMarc Flerackers 2323583227cSStefano Ceccherini if (fTrailingText) { 2333583227cSStefano Ceccherini if (fTrailingLabel) { 2340dc199a5SMarc Flerackers MovePenTo(width - StringWidth(fTrailingText) - 2350dc199a5SMarc Flerackers StringWidth(fTrailingLabel) - 2.0f, 2360dc199a5SMarc Flerackers (float)ceil(fh.ascent) + 1.0f); 2370dc199a5SMarc Flerackers DrawString(fTrailingText); 2380dc199a5SMarc Flerackers DrawString(fTrailingLabel); 2393583227cSStefano Ceccherini } else { 2400dc199a5SMarc Flerackers MovePenTo(width - StringWidth(fTrailingText) - 2.0f, 2410dc199a5SMarc Flerackers (float)ceil(fh.ascent) + 1.0f); 2420dc199a5SMarc Flerackers DrawString(fTrailingText); 24352a38012Sejakowatz } 24452a38012Sejakowatz 2453583227cSStefano Ceccherini } else if (fTrailingLabel) { 2460dc199a5SMarc Flerackers MovePenTo(width - StringWidth(fTrailingLabel) - 2.0f, 2470dc199a5SMarc Flerackers (float)ceil(fh.ascent) + 1.0f); 2480dc199a5SMarc Flerackers DrawString(fTrailingLabel); 2490dc199a5SMarc Flerackers } 2500dc199a5SMarc Flerackers 2510dc199a5SMarc Flerackers BRect rect(0.0f, (float)ceil(fh.ascent) + 4.0f, width, 2520dc199a5SMarc Flerackers (float)ceil(fh.ascent) + 4.0f + fBarHeight); 25352a38012Sejakowatz 25452a38012Sejakowatz // First bevel 25552a38012Sejakowatz SetHighColor(tint_color(ui_color ( B_PANEL_BACKGROUND_COLOR ), B_DARKEN_1_TINT)); 25652a38012Sejakowatz StrokeLine(BPoint(rect.left, rect.bottom), BPoint(rect.left, rect.top)); 25752a38012Sejakowatz StrokeLine(BPoint(rect.right, rect.top)); 25852a38012Sejakowatz 25952a38012Sejakowatz SetHighColor(tint_color(ui_color(B_PANEL_BACKGROUND_COLOR), B_LIGHTEN_2_TINT)); 26052a38012Sejakowatz StrokeLine(BPoint(rect.left + 1.0f, rect.bottom), BPoint(rect.right, rect.bottom)); 26152a38012Sejakowatz StrokeLine(BPoint(rect.right, rect.top + 1.0f)); 26252a38012Sejakowatz 26352a38012Sejakowatz rect.InsetBy(1.0f, 1.0f); 26452a38012Sejakowatz 26552a38012Sejakowatz // Second bevel 26652a38012Sejakowatz SetHighColor(tint_color(ui_color ( B_PANEL_BACKGROUND_COLOR ), B_DARKEN_4_TINT)); 26752a38012Sejakowatz StrokeLine(BPoint(rect.left, rect.bottom), BPoint(rect.left, rect.top)); 26852a38012Sejakowatz StrokeLine(BPoint(rect.right, rect.top)); 26952a38012Sejakowatz 27052a38012Sejakowatz SetHighColor(ui_color(B_PANEL_BACKGROUND_COLOR)); 27152a38012Sejakowatz StrokeLine(BPoint(rect.left + 1.0f, rect.bottom), BPoint(rect.right, rect.bottom)); 27252a38012Sejakowatz StrokeLine(BPoint(rect.right, rect.top + 1.0f)); 27352a38012Sejakowatz 27452a38012Sejakowatz rect.InsetBy(1.0f, 1.0f); 27552a38012Sejakowatz 27652a38012Sejakowatz // Filling 27752a38012Sejakowatz SetHighColor(tint_color(ui_color(B_PANEL_BACKGROUND_COLOR), B_LIGHTEN_MAX_TINT)); 27852a38012Sejakowatz FillRect(rect); 27952a38012Sejakowatz 2803583227cSStefano Ceccherini if (fCurrent != 0.0f) { 28152a38012Sejakowatz rect.right = rect.left + (float)ceil(fCurrent * (width - 4) / fMax), 28252a38012Sejakowatz 28352a38012Sejakowatz // Bevel 28452a38012Sejakowatz SetHighColor(tint_color(fBarColor, B_LIGHTEN_2_TINT)); 28552a38012Sejakowatz StrokeLine(BPoint(rect.left, rect.bottom), BPoint(rect.left, rect.top)); 28652a38012Sejakowatz StrokeLine(BPoint(rect.right, rect.top)); 28752a38012Sejakowatz 28852a38012Sejakowatz SetHighColor(tint_color(fBarColor, B_DARKEN_2_TINT)); 28952a38012Sejakowatz StrokeLine(BPoint(rect.left, rect.bottom), BPoint(rect.right, rect.bottom)); 29052a38012Sejakowatz StrokeLine(BPoint(rect.right, rect.top)); 29152a38012Sejakowatz 29252a38012Sejakowatz rect.InsetBy(1.0f, 1.0f); 29352a38012Sejakowatz 29452a38012Sejakowatz // Filling 29552a38012Sejakowatz SetHighColor(fBarColor); 29652a38012Sejakowatz FillRect(rect); 29752a38012Sejakowatz } 29852a38012Sejakowatz } 2993583227cSStefano Ceccherini 3003583227cSStefano Ceccherini 3013583227cSStefano Ceccherini void 3023583227cSStefano Ceccherini BStatusBar::SetBarColor(rgb_color color) 30352a38012Sejakowatz { 304*30d24296SMarcus Overhagen fBarColor = color; 30552a38012Sejakowatz 30652a38012Sejakowatz Invalidate(); 30752a38012Sejakowatz } 3083583227cSStefano Ceccherini 3093583227cSStefano Ceccherini 3103583227cSStefano Ceccherini void 3113583227cSStefano Ceccherini BStatusBar::SetBarHeight(float height) 31252a38012Sejakowatz { 31352a38012Sejakowatz BRect frame = Frame(); 31452a38012Sejakowatz 31552a38012Sejakowatz fBarHeight = height; 31652a38012Sejakowatz fCustomBarHeight = true; 31752a38012Sejakowatz ResizeTo(frame.Width(), fBarHeight + 16); 31852a38012Sejakowatz } 31952a38012Sejakowatz 3203583227cSStefano Ceccherini 3213583227cSStefano Ceccherini void 3223583227cSStefano Ceccherini BStatusBar::SetText(const char *string) 3233583227cSStefano Ceccherini { 3243583227cSStefano Ceccherini SetTextData(&fText, string); 32552a38012Sejakowatz 32652a38012Sejakowatz Invalidate(); 32752a38012Sejakowatz } 32852a38012Sejakowatz 3293583227cSStefano Ceccherini 3303583227cSStefano Ceccherini void 3313583227cSStefano Ceccherini BStatusBar::SetTrailingText(const char *string) 3323583227cSStefano Ceccherini { 3333583227cSStefano Ceccherini SetTextData(&fTrailingText, string); 33452a38012Sejakowatz 33552a38012Sejakowatz Invalidate(); 33652a38012Sejakowatz } 3373583227cSStefano Ceccherini 3383583227cSStefano Ceccherini 3393583227cSStefano Ceccherini void 3403583227cSStefano Ceccherini BStatusBar::SetMaxValue(float max) 34152a38012Sejakowatz { 34252a38012Sejakowatz fMax = max; 34352a38012Sejakowatz 34452a38012Sejakowatz Invalidate(); 34552a38012Sejakowatz } 3463583227cSStefano Ceccherini 3473583227cSStefano Ceccherini 3483583227cSStefano Ceccherini void 3493583227cSStefano Ceccherini BStatusBar::Update(float delta, const char *text, const char *trailingText) 35052a38012Sejakowatz { 35152a38012Sejakowatz fCurrent += delta; 35252a38012Sejakowatz 353f45d1cc7SMarc Flerackers if (fCurrent > fMax) 354f45d1cc7SMarc Flerackers fCurrent = fMax; 355f45d1cc7SMarc Flerackers 35697c93182Shaydentech // Passing NULL for the text or trailingText argument retains the previous 35797c93182Shaydentech // text or trailing text string. 35897c93182Shaydentech if (text) 3593583227cSStefano Ceccherini SetTextData(&fText, text); 36052a38012Sejakowatz 36197c93182Shaydentech if (trailingText) 3623583227cSStefano Ceccherini SetTextData(&fTrailingText, trailingText); 36352a38012Sejakowatz 36452a38012Sejakowatz Invalidate(); 36552a38012Sejakowatz } 3663583227cSStefano Ceccherini 3673583227cSStefano Ceccherini 3683583227cSStefano Ceccherini void 3693583227cSStefano Ceccherini BStatusBar::Reset(const char *label, const char *trailingLabel) 37052a38012Sejakowatz { 37197c93182Shaydentech // Reset replaces the label and trailing label with copies of the 37297c93182Shaydentech // strings passed as arguments. If either argument is NULL, the 37397c93182Shaydentech // label or trailing label will be deleted and erased. 3743583227cSStefano Ceccherini SetTextData(&fLabel, label); 3753583227cSStefano Ceccherini SetTextData(&fTrailingLabel, trailingLabel); 37652a38012Sejakowatz 37797c93182Shaydentech // Reset deletes and erases any text or trailing text 3783583227cSStefano Ceccherini SetTextData(&fText, NULL); 3793583227cSStefano Ceccherini SetTextData(&fTrailingText, NULL); 380b7b28df0Shaydentech 38152a38012Sejakowatz fCurrent = 0.0f; 382b7b28df0Shaydentech fMax = 100.0f; 38352a38012Sejakowatz 38452a38012Sejakowatz Invalidate(); 38552a38012Sejakowatz } 3863583227cSStefano Ceccherini 3873583227cSStefano Ceccherini 3883583227cSStefano Ceccherini float 3893583227cSStefano Ceccherini BStatusBar::CurrentValue() const 39052a38012Sejakowatz { 39152a38012Sejakowatz return fCurrent; 39252a38012Sejakowatz } 3933583227cSStefano Ceccherini 3943583227cSStefano Ceccherini 3953583227cSStefano Ceccherini float 3963583227cSStefano Ceccherini BStatusBar::MaxValue() const 39752a38012Sejakowatz { 39852a38012Sejakowatz return fMax; 39952a38012Sejakowatz } 4003583227cSStefano Ceccherini 4013583227cSStefano Ceccherini 4023583227cSStefano Ceccherini rgb_color 4033583227cSStefano Ceccherini BStatusBar::BarColor() const 40452a38012Sejakowatz { 40552a38012Sejakowatz return fBarColor; 40652a38012Sejakowatz } 4073583227cSStefano Ceccherini 4083583227cSStefano Ceccherini 4093583227cSStefano Ceccherini float 4103583227cSStefano Ceccherini BStatusBar::BarHeight() const 41152a38012Sejakowatz { 4123583227cSStefano Ceccherini if (!fCustomBarHeight && fBarHeight == -1.0f) { 41352a38012Sejakowatz font_height fh; 41452a38012Sejakowatz GetFontHeight(&fh); 4153583227cSStefano Ceccherini const_cast<BStatusBar *>(this)->fBarHeight = fh.ascent + fh.descent + 6.0f; 41652a38012Sejakowatz } 41752a38012Sejakowatz 41852a38012Sejakowatz return fBarHeight; 41952a38012Sejakowatz } 4203583227cSStefano Ceccherini 4213583227cSStefano Ceccherini 4223583227cSStefano Ceccherini const char * 4233583227cSStefano Ceccherini BStatusBar::Text() const 42452a38012Sejakowatz { 42552a38012Sejakowatz return fText; 42652a38012Sejakowatz } 4273583227cSStefano Ceccherini 4283583227cSStefano Ceccherini 4293583227cSStefano Ceccherini const char * 4303583227cSStefano Ceccherini BStatusBar::TrailingText() const 43152a38012Sejakowatz { 43252a38012Sejakowatz return fTrailingText; 43352a38012Sejakowatz } 4343583227cSStefano Ceccherini 4353583227cSStefano Ceccherini 4363583227cSStefano Ceccherini const char * 4373583227cSStefano Ceccherini BStatusBar::Label() const 43852a38012Sejakowatz { 43952a38012Sejakowatz return fLabel; 44052a38012Sejakowatz } 4413583227cSStefano Ceccherini 4423583227cSStefano Ceccherini 4433583227cSStefano Ceccherini const char * 4443583227cSStefano Ceccherini BStatusBar::TrailingLabel() const 44552a38012Sejakowatz { 44652a38012Sejakowatz return fTrailingLabel; 44752a38012Sejakowatz } 4483583227cSStefano Ceccherini 4493583227cSStefano Ceccherini 4503583227cSStefano Ceccherini void 4513583227cSStefano Ceccherini BStatusBar::MouseDown(BPoint point) 45252a38012Sejakowatz { 45352a38012Sejakowatz BView::MouseDown(point); 45452a38012Sejakowatz } 4553583227cSStefano Ceccherini 4563583227cSStefano Ceccherini 4573583227cSStefano Ceccherini void 4583583227cSStefano Ceccherini BStatusBar::MouseUp(BPoint point) 45952a38012Sejakowatz { 46052a38012Sejakowatz BView::MouseUp(point); 46152a38012Sejakowatz } 4623583227cSStefano Ceccherini 4633583227cSStefano Ceccherini 4643583227cSStefano Ceccherini void 4653583227cSStefano Ceccherini BStatusBar::WindowActivated(bool state) 46652a38012Sejakowatz { 46752a38012Sejakowatz BView::WindowActivated(state); 46852a38012Sejakowatz } 4693583227cSStefano Ceccherini 4703583227cSStefano Ceccherini 4713583227cSStefano Ceccherini void 4723583227cSStefano Ceccherini BStatusBar::MouseMoved(BPoint point, uint32 transit, const BMessage *message) 47352a38012Sejakowatz { 47452a38012Sejakowatz BView::MouseMoved(point, transit, message); 47552a38012Sejakowatz } 4763583227cSStefano Ceccherini 4773583227cSStefano Ceccherini 4783583227cSStefano Ceccherini void 4793583227cSStefano Ceccherini BStatusBar::DetachedFromWindow() 48052a38012Sejakowatz { 48152a38012Sejakowatz BView::DetachedFromWindow(); 48252a38012Sejakowatz } 4833583227cSStefano Ceccherini 4843583227cSStefano Ceccherini 4853583227cSStefano Ceccherini void 4863583227cSStefano Ceccherini BStatusBar::FrameMoved(BPoint newPosition) 48752a38012Sejakowatz { 4883583227cSStefano Ceccherini BView::FrameMoved(newPosition); 48952a38012Sejakowatz } 4903583227cSStefano Ceccherini 4913583227cSStefano Ceccherini 4923583227cSStefano Ceccherini void 4933583227cSStefano Ceccherini BStatusBar::FrameResized(float newWidth, float newHeight) 49452a38012Sejakowatz { 4953583227cSStefano Ceccherini BView::FrameResized(newWidth, newHeight); 49652a38012Sejakowatz } 4973583227cSStefano Ceccherini 4983583227cSStefano Ceccherini 4993583227cSStefano Ceccherini BHandler * 5003583227cSStefano Ceccherini BStatusBar::ResolveSpecifier(BMessage *message, int32 index, 50152a38012Sejakowatz BMessage *specifier, 50252a38012Sejakowatz int32 what, const char *property) 50352a38012Sejakowatz { 50452a38012Sejakowatz return BView::ResolveSpecifier(message, index, specifier, what, property); 50552a38012Sejakowatz } 5063583227cSStefano Ceccherini 5073583227cSStefano Ceccherini 5083583227cSStefano Ceccherini void 5093583227cSStefano Ceccherini BStatusBar::ResizeToPreferred() 51052a38012Sejakowatz { 51152a38012Sejakowatz BView::ResizeToPreferred(); 51252a38012Sejakowatz } 5133583227cSStefano Ceccherini 5143583227cSStefano Ceccherini 5153583227cSStefano Ceccherini void 5168643b098SAxel Dörfler BStatusBar::GetPreferredSize(float* _width, float* _height) 51752a38012Sejakowatz { 5188643b098SAxel Dörfler if (_width) { 5198643b098SAxel Dörfler *_width = (fLabel ? (float)ceil(StringWidth(fLabel)) : 0.0f) 5208643b098SAxel Dörfler + (fTrailingLabel ? (float)ceil(StringWidth(fTrailingLabel)) : 0.0f) 5218643b098SAxel Dörfler + 7.0f; 5228643b098SAxel Dörfler } 52352a38012Sejakowatz 5248643b098SAxel Dörfler if (_height) { 5258643b098SAxel Dörfler font_height fontHeight; 5268643b098SAxel Dörfler GetFontHeight(&fontHeight); 5278643b098SAxel Dörfler 5288643b098SAxel Dörfler *_height = ceil(fontHeight.ascent + fontHeight.descent) + 5.0f + BarHeight(); 5298643b098SAxel Dörfler } 53052a38012Sejakowatz } 5313583227cSStefano Ceccherini 5323583227cSStefano Ceccherini 5333583227cSStefano Ceccherini void 5343583227cSStefano Ceccherini BStatusBar::MakeFocus(bool state) 53552a38012Sejakowatz { 53652a38012Sejakowatz BView::MakeFocus(state); 53752a38012Sejakowatz } 5383583227cSStefano Ceccherini 5393583227cSStefano Ceccherini 5403583227cSStefano Ceccherini void 5413583227cSStefano Ceccherini BStatusBar::AllAttached() 54252a38012Sejakowatz { 54352a38012Sejakowatz BView::AllAttached(); 54452a38012Sejakowatz } 5453583227cSStefano Ceccherini 5463583227cSStefano Ceccherini 5473583227cSStefano Ceccherini void 5483583227cSStefano Ceccherini BStatusBar::AllDetached() 54952a38012Sejakowatz { 55052a38012Sejakowatz BView::AllDetached(); 55152a38012Sejakowatz } 5523583227cSStefano Ceccherini 5533583227cSStefano Ceccherini 5543583227cSStefano Ceccherini status_t 5553583227cSStefano Ceccherini BStatusBar::GetSupportedSuites(BMessage *data) 55652a38012Sejakowatz { 55752a38012Sejakowatz return BView::GetSupportedSuites(data); 55852a38012Sejakowatz } 5593583227cSStefano Ceccherini 5603583227cSStefano Ceccherini 5613583227cSStefano Ceccherini status_t 5623583227cSStefano Ceccherini BStatusBar::Perform(perform_code d, void *arg) 56352a38012Sejakowatz { 5643583227cSStefano Ceccherini return BView::Perform(d, arg); 56552a38012Sejakowatz } 5663583227cSStefano Ceccherini 5673583227cSStefano Ceccherini 56852a38012Sejakowatz void BStatusBar::_ReservedStatusBar1() {} 56952a38012Sejakowatz void BStatusBar::_ReservedStatusBar2() {} 57052a38012Sejakowatz void BStatusBar::_ReservedStatusBar3() {} 57152a38012Sejakowatz void BStatusBar::_ReservedStatusBar4() {} 57252a38012Sejakowatz 5733583227cSStefano Ceccherini 5743583227cSStefano Ceccherini BStatusBar & 5753583227cSStefano Ceccherini BStatusBar::operator=(const BStatusBar &) 57652a38012Sejakowatz { 57752a38012Sejakowatz return *this; 57852a38012Sejakowatz } 57952a38012Sejakowatz 5803583227cSStefano Ceccherini 5813583227cSStefano Ceccherini void 5823583227cSStefano Ceccherini BStatusBar::InitObject(const char *label, const char *trailingLabel) 5833583227cSStefano Ceccherini { 5843583227cSStefano Ceccherini SetTextData(&fLabel, label); 5853583227cSStefano Ceccherini SetTextData(&fTrailingLabel, trailingLabel); 5863583227cSStefano Ceccherini } 5873583227cSStefano Ceccherini 5883583227cSStefano Ceccherini 5893583227cSStefano Ceccherini void 5903583227cSStefano Ceccherini BStatusBar::SetTextData(char **dest, const char *source) 5913583227cSStefano Ceccherini { 5923583227cSStefano Ceccherini ASSERT(dest != NULL); 5933583227cSStefano Ceccherini 5943583227cSStefano Ceccherini if (*dest != NULL) { 5953583227cSStefano Ceccherini free(*dest); 5963583227cSStefano Ceccherini *dest = NULL; 5973583227cSStefano Ceccherini } 5983583227cSStefano Ceccherini 59999f695c9SAxel Dörfler if (source != NULL && source[0] != '\0') 6003583227cSStefano Ceccherini *dest = strdup(source); 6013583227cSStefano Ceccherini } 6023583227cSStefano Ceccherini 6033583227cSStefano Ceccherini 6043583227cSStefano Ceccherini void 6053583227cSStefano Ceccherini BStatusBar::FillBar(BRect rect) 6063583227cSStefano Ceccherini { 6073583227cSStefano Ceccherini // TODO: 6083583227cSStefano Ceccherini } 6093583227cSStefano Ceccherini 6103583227cSStefano Ceccherini 6113583227cSStefano Ceccherini void 6123583227cSStefano Ceccherini BStatusBar::Resize() 6133583227cSStefano Ceccherini { 6143583227cSStefano Ceccherini // TODO: 6153583227cSStefano Ceccherini } 6163583227cSStefano Ceccherini 6173583227cSStefano Ceccherini 6183583227cSStefano Ceccherini void 6193583227cSStefano Ceccherini BStatusBar::_Draw(BRect updateRect, bool barOnly) 6203583227cSStefano Ceccherini { 6213583227cSStefano Ceccherini // TODO: 6223583227cSStefano Ceccherini } 623