152a38012Sejakowatz //------------------------------------------------------------------------------ 252a38012Sejakowatz // Copyright (c) 2001-2002, OpenBeOS 352a38012Sejakowatz // 452a38012Sejakowatz // Permission is hereby granted, free of charge, to any person obtaining a 552a38012Sejakowatz // copy of this software and associated documentation files (the "Software"), 652a38012Sejakowatz // to deal in the Software without restriction, including without limitation 752a38012Sejakowatz // the rights to use, copy, modify, merge, publish, distribute, sublicense, 852a38012Sejakowatz // and/or sell copies of the Software, and to permit persons to whom the 952a38012Sejakowatz // Software is furnished to do so, subject to the following conditions: 1052a38012Sejakowatz // 1152a38012Sejakowatz // The above copyright notice and this permission notice shall be included in 1252a38012Sejakowatz // all copies or substantial portions of the Software. 1352a38012Sejakowatz // 1452a38012Sejakowatz // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 1552a38012Sejakowatz // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 1652a38012Sejakowatz // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 1752a38012Sejakowatz // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 1852a38012Sejakowatz // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 1952a38012Sejakowatz // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 2052a38012Sejakowatz // DEALINGS IN THE SOFTWARE. 2152a38012Sejakowatz // 2252a38012Sejakowatz // File Name: StatusBar.cpp 2352a38012Sejakowatz // Author: Marc Flerackers (mflerackers@androme.be) 2452a38012Sejakowatz // Description: BStatusBar displays a "percentage-of-completion" gauge. 2552a38012Sejakowatz //------------------------------------------------------------------------------ 2652a38012Sejakowatz #include <string.h> 2730fd5147Shaydentech #include <stdlib.h> 2852a38012Sejakowatz 293583227cSStefano Ceccherini #include <Debug.h> 3052a38012Sejakowatz #include <Message.h> 313583227cSStefano Ceccherini #include <StatusBar.h> 3252a38012Sejakowatz 3352a38012Sejakowatz 3452a38012Sejakowatz BStatusBar::BStatusBar(BRect frame, const char *name, const char *label, 3552a38012Sejakowatz const char *trailingLabel) 36eb997429SMarc Flerackers : BView(frame, name, B_FOLLOW_LEFT | B_FOLLOW_TOP, B_WILL_DRAW), 375e959958SStefano Ceccherini fLabel(NULL), 385e959958SStefano Ceccherini fTrailingLabel(NULL), 3952a38012Sejakowatz fText(NULL), 4052a38012Sejakowatz fTrailingText(NULL), 4152a38012Sejakowatz fMax(100.0f), 4252a38012Sejakowatz fCurrent(0.0f), 4352a38012Sejakowatz fBarHeight(-1.0f), 4452a38012Sejakowatz fTrailingWidth(-1.0f), 4552a38012Sejakowatz fEraseText(-1.0f), 4652a38012Sejakowatz fEraseTrailingText(-1.0f), 4752a38012Sejakowatz fCustomBarHeight(false) 4852a38012Sejakowatz 4952a38012Sejakowatz { 503583227cSStefano Ceccherini // TODO: Move initializer list and other stuff to InitObject 513583227cSStefano Ceccherini InitObject(label, trailingLabel); 5252a38012Sejakowatz 5352a38012Sejakowatz fBarColor.red = 50; 5452a38012Sejakowatz fBarColor.green = 150; 5552a38012Sejakowatz fBarColor.blue = 255; 5652a38012Sejakowatz fBarColor.alpha = 255; 5752a38012Sejakowatz } 583583227cSStefano Ceccherini 593583227cSStefano Ceccherini 6052a38012Sejakowatz BStatusBar::BStatusBar(BMessage *archive) 6152a38012Sejakowatz : BView(archive), 625e959958SStefano Ceccherini fLabel(NULL), 635e959958SStefano Ceccherini fTrailingLabel(NULL), 64*679d063bSStefano Ceccherini fText(NULL), 65*679d063bSStefano Ceccherini fTrailingText(NULL), 66*679d063bSStefano Ceccherini fMax(100.0f), 67*679d063bSStefano Ceccherini fCurrent(0.0f), 68*679d063bSStefano Ceccherini fBarHeight(-1.0f), 6952a38012Sejakowatz fTrailingWidth(-1.0f), 7052a38012Sejakowatz fEraseText(-1.0f), 7152a38012Sejakowatz fEraseTrailingText(-1.0f), 7252a38012Sejakowatz fCustomBarHeight(false) 7352a38012Sejakowatz { 743583227cSStefano Ceccherini const char *label = NULL; 753583227cSStefano Ceccherini const char *trailingLabel = NULL; 763583227cSStefano Ceccherini archive->FindString("_label", &label); 773583227cSStefano Ceccherini archive->FindString("_tlabel", &trailingLabel); 783583227cSStefano Ceccherini 793583227cSStefano Ceccherini InitObject(label, trailingLabel); 803583227cSStefano Ceccherini 8152a38012Sejakowatz if (archive->FindFloat("_high", &fBarHeight) != B_OK) 8252a38012Sejakowatz fBarHeight = -1.0f; 8352a38012Sejakowatz 8452a38012Sejakowatz const void *ptr; 8552a38012Sejakowatz 863583227cSStefano Ceccherini if (archive->FindData("_bcolor", B_INT32_TYPE, &ptr, NULL ) < B_OK) { 8752a38012Sejakowatz fBarColor.red = 50; 8852a38012Sejakowatz fBarColor.green = 150; 8952a38012Sejakowatz fBarColor.blue = 255; 9052a38012Sejakowatz fBarColor.alpha = 255; 913583227cSStefano Ceccherini } else 9252a38012Sejakowatz memcpy(&fBarColor, ptr, sizeof(rgb_color)); 9352a38012Sejakowatz 943583227cSStefano Ceccherini if (archive->FindFloat("_val", &fCurrent) < B_OK) 9552a38012Sejakowatz fCurrent = 0.0f; 9652a38012Sejakowatz 973583227cSStefano Ceccherini if (archive->FindFloat("_max", &fMax) < B_OK) 9852a38012Sejakowatz fMax = 100.0f; 9952a38012Sejakowatz 10052a38012Sejakowatz const char *string; 10152a38012Sejakowatz 1023583227cSStefano Ceccherini if (archive->FindString("_text", &string) < B_OK) 10352a38012Sejakowatz fText = NULL; 10452a38012Sejakowatz else 10552a38012Sejakowatz fText = strdup(string); 10652a38012Sejakowatz 1073583227cSStefano Ceccherini if (archive->FindString("_ttext", &string) < B_OK) 10852a38012Sejakowatz fTrailingText = NULL; 10952a38012Sejakowatz else 11052a38012Sejakowatz fTrailingText = strdup(string); 11152a38012Sejakowatz 11252a38012Sejakowatz } 1133583227cSStefano Ceccherini 1143583227cSStefano Ceccherini 11552a38012Sejakowatz BStatusBar::~BStatusBar() 11652a38012Sejakowatz { 117eb997429SMarc Flerackers free(fLabel); 118eb997429SMarc Flerackers free(fTrailingLabel); 119eb997429SMarc Flerackers free(fText); 120eb997429SMarc Flerackers free(fTrailingText); 12152a38012Sejakowatz } 1223583227cSStefano Ceccherini 1233583227cSStefano Ceccherini 1243583227cSStefano Ceccherini BArchivable * 1253583227cSStefano Ceccherini BStatusBar::Instantiate(BMessage *archive) 12652a38012Sejakowatz { 12752a38012Sejakowatz if (validate_instantiation(archive, "BStatusBar")) 12852a38012Sejakowatz return new BStatusBar(archive); 12952a38012Sejakowatz 13052a38012Sejakowatz return NULL; 13152a38012Sejakowatz } 1323583227cSStefano Ceccherini 1333583227cSStefano Ceccherini 1343583227cSStefano Ceccherini status_t 1353583227cSStefano Ceccherini BStatusBar::Archive(BMessage *archive, bool deep) const 13652a38012Sejakowatz { 1378f3e1554SMarc Flerackers status_t err = BView::Archive(archive, deep); 1388f3e1554SMarc Flerackers 1393583227cSStefano Ceccherini if (err < B_OK) 1408f3e1554SMarc Flerackers return err; 14152a38012Sejakowatz 14252a38012Sejakowatz if (fBarHeight != 16.0f) 1438f3e1554SMarc Flerackers err = archive->AddFloat("_high", fBarHeight); 1448f3e1554SMarc Flerackers 1453583227cSStefano Ceccherini if (err < B_OK) 1468f3e1554SMarc Flerackers return err; 14752a38012Sejakowatz 148b56e4e65SDarkWyrm // DW: I'm pretty sure we don't need to compare the color with (50, 150, 255) ? 1498f3e1554SMarc Flerackers err = archive->AddData("_bcolor", B_INT32_TYPE, &fBarColor, sizeof( int32 )); 1508f3e1554SMarc Flerackers 1513583227cSStefano Ceccherini if (err < B_OK) 1528f3e1554SMarc Flerackers return err; 15352a38012Sejakowatz 15452a38012Sejakowatz if (fCurrent != 0.0f) 1558f3e1554SMarc Flerackers err = archive->AddFloat("_val", fCurrent); 1568f3e1554SMarc Flerackers 1573583227cSStefano Ceccherini if (err < B_OK) 1588f3e1554SMarc Flerackers return err; 15952a38012Sejakowatz 16052a38012Sejakowatz if (fMax != 100.0f ) 1618f3e1554SMarc Flerackers err = archive->AddFloat("_max", fMax); 1628f3e1554SMarc Flerackers 1633583227cSStefano Ceccherini if (err < B_OK) 1648f3e1554SMarc Flerackers return err; 16552a38012Sejakowatz 16652a38012Sejakowatz if (fText ) 1678f3e1554SMarc Flerackers err = archive->AddString("_text", fText); 1688f3e1554SMarc Flerackers 1693583227cSStefano Ceccherini if (err < B_OK) 1708f3e1554SMarc Flerackers return err; 17152a38012Sejakowatz 17252a38012Sejakowatz if (fTrailingText) 1738f3e1554SMarc Flerackers err = archive->AddString("_ttext", fTrailingText); 1748f3e1554SMarc Flerackers 1753583227cSStefano Ceccherini if (err < B_OK) 1768f3e1554SMarc Flerackers return err; 17752a38012Sejakowatz 17852a38012Sejakowatz if (fLabel) 1798f3e1554SMarc Flerackers err = archive->AddString("_label", fLabel); 1808f3e1554SMarc Flerackers 1813583227cSStefano Ceccherini if (err < B_OK) 1828f3e1554SMarc Flerackers return err; 18352a38012Sejakowatz 18452a38012Sejakowatz if (fTrailingLabel) 1858f3e1554SMarc Flerackers err = archive->AddString ("_tlabel", fTrailingLabel); 18652a38012Sejakowatz 1878f3e1554SMarc Flerackers return err; 18852a38012Sejakowatz } 1893583227cSStefano Ceccherini 1903583227cSStefano Ceccherini 1913583227cSStefano Ceccherini void 1923583227cSStefano Ceccherini BStatusBar::AttachedToWindow() 19352a38012Sejakowatz { 19452a38012Sejakowatz float width, height; 19552a38012Sejakowatz GetPreferredSize(&width, &height); 19652a38012Sejakowatz ResizeTo(Frame().Width(), height); 19752a38012Sejakowatz 1983583227cSStefano Ceccherini if (Parent()) { 19952a38012Sejakowatz SetViewColor(Parent()->ViewColor()); 200b7b28df0Shaydentech SetLowColor(Parent()->ViewColor()); 201b7b28df0Shaydentech } 20252a38012Sejakowatz } 2033583227cSStefano Ceccherini 2043583227cSStefano Ceccherini 2053583227cSStefano Ceccherini void 2063583227cSStefano Ceccherini BStatusBar::MessageReceived(BMessage *message) 20752a38012Sejakowatz { 2083583227cSStefano Ceccherini switch(message->what) { 20952a38012Sejakowatz case B_UPDATE_STATUS_BAR: 21052a38012Sejakowatz { 21152a38012Sejakowatz float delta; 21252a38012Sejakowatz const char *text = NULL, *trailing_text = NULL; 21352a38012Sejakowatz 21452a38012Sejakowatz message->FindFloat("delta", &delta); 21552a38012Sejakowatz message->FindString("text", &text); 216ec053666SStefano Ceccherini message->FindString("trailing_text", &trailing_text); 21752a38012Sejakowatz 21852a38012Sejakowatz Update(delta, text, trailing_text); 21952a38012Sejakowatz 22052a38012Sejakowatz break; 22152a38012Sejakowatz } 2223583227cSStefano Ceccherini 22352a38012Sejakowatz case B_RESET_STATUS_BAR: 22452a38012Sejakowatz { 22552a38012Sejakowatz const char *label = NULL, *trailing_label = NULL; 22652a38012Sejakowatz 22752a38012Sejakowatz message->FindString("label", &label); 228ec053666SStefano Ceccherini message->FindString("trailing_label", &trailing_label); 22952a38012Sejakowatz 23052a38012Sejakowatz Reset(label, trailing_label); 23152a38012Sejakowatz 23252a38012Sejakowatz break; 23352a38012Sejakowatz } 2343583227cSStefano Ceccherini 23552a38012Sejakowatz default: 23652a38012Sejakowatz BView::MessageReceived(message); 2373583227cSStefano Ceccherini break; 23852a38012Sejakowatz } 23952a38012Sejakowatz } 2403583227cSStefano Ceccherini 2413583227cSStefano Ceccherini 2423583227cSStefano Ceccherini void 2433583227cSStefano Ceccherini BStatusBar::Draw(BRect updateRect) 24452a38012Sejakowatz { 24552a38012Sejakowatz float width = Frame().Width(); 24652a38012Sejakowatz font_height fh; 24752a38012Sejakowatz GetFontHeight(&fh); 24852a38012Sejakowatz 24952a38012Sejakowatz SetHighColor(0, 0, 0); 2500dc199a5SMarc Flerackers MovePenTo(2.0f, (float)ceil(fh.ascent) + 1.0f); 2510dc199a5SMarc Flerackers 2520dc199a5SMarc Flerackers if (fLabel) 2530dc199a5SMarc Flerackers DrawString(fLabel); 2540dc199a5SMarc Flerackers if (fText) 2550dc199a5SMarc Flerackers DrawString(fText); 2560dc199a5SMarc Flerackers 2573583227cSStefano Ceccherini if (fTrailingText) { 2583583227cSStefano Ceccherini if (fTrailingLabel) { 2590dc199a5SMarc Flerackers MovePenTo(width - StringWidth(fTrailingText) - 2600dc199a5SMarc Flerackers StringWidth(fTrailingLabel) - 2.0f, 2610dc199a5SMarc Flerackers (float)ceil(fh.ascent) + 1.0f); 2620dc199a5SMarc Flerackers DrawString(fTrailingText); 2630dc199a5SMarc Flerackers DrawString(fTrailingLabel); 2643583227cSStefano Ceccherini } else { 2650dc199a5SMarc Flerackers MovePenTo(width - StringWidth(fTrailingText) - 2.0f, 2660dc199a5SMarc Flerackers (float)ceil(fh.ascent) + 1.0f); 2670dc199a5SMarc Flerackers DrawString(fTrailingText); 26852a38012Sejakowatz } 26952a38012Sejakowatz 2703583227cSStefano Ceccherini } else if (fTrailingLabel) { 2710dc199a5SMarc Flerackers MovePenTo(width - StringWidth(fTrailingLabel) - 2.0f, 2720dc199a5SMarc Flerackers (float)ceil(fh.ascent) + 1.0f); 2730dc199a5SMarc Flerackers DrawString(fTrailingLabel); 2740dc199a5SMarc Flerackers } 2750dc199a5SMarc Flerackers 2760dc199a5SMarc Flerackers BRect rect(0.0f, (float)ceil(fh.ascent) + 4.0f, width, 2770dc199a5SMarc Flerackers (float)ceil(fh.ascent) + 4.0f + fBarHeight); 27852a38012Sejakowatz 27952a38012Sejakowatz // First bevel 28052a38012Sejakowatz SetHighColor(tint_color(ui_color ( B_PANEL_BACKGROUND_COLOR ), B_DARKEN_1_TINT)); 28152a38012Sejakowatz StrokeLine(BPoint(rect.left, rect.bottom), BPoint(rect.left, rect.top)); 28252a38012Sejakowatz StrokeLine(BPoint(rect.right, rect.top)); 28352a38012Sejakowatz 28452a38012Sejakowatz SetHighColor(tint_color(ui_color(B_PANEL_BACKGROUND_COLOR), B_LIGHTEN_2_TINT)); 28552a38012Sejakowatz StrokeLine(BPoint(rect.left + 1.0f, rect.bottom), BPoint(rect.right, rect.bottom)); 28652a38012Sejakowatz StrokeLine(BPoint(rect.right, rect.top + 1.0f)); 28752a38012Sejakowatz 28852a38012Sejakowatz rect.InsetBy(1.0f, 1.0f); 28952a38012Sejakowatz 29052a38012Sejakowatz // Second bevel 29152a38012Sejakowatz SetHighColor(tint_color(ui_color ( B_PANEL_BACKGROUND_COLOR ), B_DARKEN_4_TINT)); 29252a38012Sejakowatz StrokeLine(BPoint(rect.left, rect.bottom), BPoint(rect.left, rect.top)); 29352a38012Sejakowatz StrokeLine(BPoint(rect.right, rect.top)); 29452a38012Sejakowatz 29552a38012Sejakowatz SetHighColor(ui_color(B_PANEL_BACKGROUND_COLOR)); 29652a38012Sejakowatz StrokeLine(BPoint(rect.left + 1.0f, rect.bottom), BPoint(rect.right, rect.bottom)); 29752a38012Sejakowatz StrokeLine(BPoint(rect.right, rect.top + 1.0f)); 29852a38012Sejakowatz 29952a38012Sejakowatz rect.InsetBy(1.0f, 1.0f); 30052a38012Sejakowatz 30152a38012Sejakowatz // Filling 30252a38012Sejakowatz SetHighColor(tint_color(ui_color(B_PANEL_BACKGROUND_COLOR), B_LIGHTEN_MAX_TINT)); 30352a38012Sejakowatz FillRect(rect); 30452a38012Sejakowatz 3053583227cSStefano Ceccherini if (fCurrent != 0.0f) { 30652a38012Sejakowatz rect.right = rect.left + (float)ceil(fCurrent * (width - 4) / fMax), 30752a38012Sejakowatz 30852a38012Sejakowatz // Bevel 30952a38012Sejakowatz SetHighColor(tint_color(fBarColor, B_LIGHTEN_2_TINT)); 31052a38012Sejakowatz StrokeLine(BPoint(rect.left, rect.bottom), BPoint(rect.left, rect.top)); 31152a38012Sejakowatz StrokeLine(BPoint(rect.right, rect.top)); 31252a38012Sejakowatz 31352a38012Sejakowatz SetHighColor(tint_color(fBarColor, B_DARKEN_2_TINT)); 31452a38012Sejakowatz StrokeLine(BPoint(rect.left, rect.bottom), BPoint(rect.right, rect.bottom)); 31552a38012Sejakowatz StrokeLine(BPoint(rect.right, rect.top)); 31652a38012Sejakowatz 31752a38012Sejakowatz rect.InsetBy(1.0f, 1.0f); 31852a38012Sejakowatz 31952a38012Sejakowatz // Filling 32052a38012Sejakowatz SetHighColor(fBarColor); 32152a38012Sejakowatz FillRect(rect); 32252a38012Sejakowatz } 32352a38012Sejakowatz } 3243583227cSStefano Ceccherini 3253583227cSStefano Ceccherini 3263583227cSStefano Ceccherini void 3273583227cSStefano Ceccherini BStatusBar::SetBarColor(rgb_color color) 32852a38012Sejakowatz { 32952a38012Sejakowatz memcpy(&fBarColor, &color, sizeof(rgb_color)); 33052a38012Sejakowatz 33152a38012Sejakowatz Invalidate(); 33252a38012Sejakowatz } 3333583227cSStefano Ceccherini 3343583227cSStefano Ceccherini 3353583227cSStefano Ceccherini void 3363583227cSStefano Ceccherini BStatusBar::SetBarHeight(float height) 33752a38012Sejakowatz { 33852a38012Sejakowatz BRect frame = Frame(); 33952a38012Sejakowatz 34052a38012Sejakowatz fBarHeight = height; 34152a38012Sejakowatz fCustomBarHeight = true; 34252a38012Sejakowatz ResizeTo(frame.Width(), fBarHeight + 16); 34352a38012Sejakowatz } 34452a38012Sejakowatz 3453583227cSStefano Ceccherini 3463583227cSStefano Ceccherini void 3473583227cSStefano Ceccherini BStatusBar::SetText(const char *string) 3483583227cSStefano Ceccherini { 3493583227cSStefano Ceccherini SetTextData(&fText, string); 35052a38012Sejakowatz 35152a38012Sejakowatz Invalidate(); 35252a38012Sejakowatz } 35352a38012Sejakowatz 3543583227cSStefano Ceccherini 3553583227cSStefano Ceccherini void 3563583227cSStefano Ceccherini BStatusBar::SetTrailingText(const char *string) 3573583227cSStefano Ceccherini { 3583583227cSStefano Ceccherini SetTextData(&fTrailingText, string); 35952a38012Sejakowatz 36052a38012Sejakowatz Invalidate(); 36152a38012Sejakowatz } 3623583227cSStefano Ceccherini 3633583227cSStefano Ceccherini 3643583227cSStefano Ceccherini void 3653583227cSStefano Ceccherini BStatusBar::SetMaxValue(float max) 36652a38012Sejakowatz { 36752a38012Sejakowatz fMax = max; 36852a38012Sejakowatz 36952a38012Sejakowatz Invalidate(); 37052a38012Sejakowatz } 3713583227cSStefano Ceccherini 3723583227cSStefano Ceccherini 3733583227cSStefano Ceccherini void 3743583227cSStefano Ceccherini BStatusBar::Update(float delta, const char *text, const char *trailingText) 37552a38012Sejakowatz { 37652a38012Sejakowatz fCurrent += delta; 37752a38012Sejakowatz 378f45d1cc7SMarc Flerackers if (fCurrent > fMax) 379f45d1cc7SMarc Flerackers fCurrent = fMax; 380f45d1cc7SMarc Flerackers 38197c93182Shaydentech // Passing NULL for the text or trailingText argument retains the previous 38297c93182Shaydentech // text or trailing text string. 38397c93182Shaydentech if (text) 3843583227cSStefano Ceccherini SetTextData(&fText, text); 38552a38012Sejakowatz 38697c93182Shaydentech if (trailingText) 3873583227cSStefano Ceccherini SetTextData(&fTrailingText, trailingText); 38852a38012Sejakowatz 38952a38012Sejakowatz Invalidate(); 39052a38012Sejakowatz } 3913583227cSStefano Ceccherini 3923583227cSStefano Ceccherini 3933583227cSStefano Ceccherini void 3943583227cSStefano Ceccherini BStatusBar::Reset(const char *label, const char *trailingLabel) 39552a38012Sejakowatz { 39697c93182Shaydentech // Reset replaces the label and trailing label with copies of the 39797c93182Shaydentech // strings passed as arguments. If either argument is NULL, the 39897c93182Shaydentech // label or trailing label will be deleted and erased. 3993583227cSStefano Ceccherini SetTextData(&fLabel, label); 4003583227cSStefano Ceccherini SetTextData(&fTrailingLabel, trailingLabel); 40152a38012Sejakowatz 40297c93182Shaydentech // Reset deletes and erases any text or trailing text 4033583227cSStefano Ceccherini SetTextData(&fText, NULL); 4043583227cSStefano Ceccherini SetTextData(&fTrailingText, NULL); 405b7b28df0Shaydentech 40652a38012Sejakowatz fCurrent = 0.0f; 407b7b28df0Shaydentech fMax = 100.0f; 40852a38012Sejakowatz 40952a38012Sejakowatz Invalidate(); 41052a38012Sejakowatz } 4113583227cSStefano Ceccherini 4123583227cSStefano Ceccherini 4133583227cSStefano Ceccherini float 4143583227cSStefano Ceccherini BStatusBar::CurrentValue() const 41552a38012Sejakowatz { 41652a38012Sejakowatz return fCurrent; 41752a38012Sejakowatz } 4183583227cSStefano Ceccherini 4193583227cSStefano Ceccherini 4203583227cSStefano Ceccherini float 4213583227cSStefano Ceccherini BStatusBar::MaxValue() const 42252a38012Sejakowatz { 42352a38012Sejakowatz return fMax; 42452a38012Sejakowatz } 4253583227cSStefano Ceccherini 4263583227cSStefano Ceccherini 4273583227cSStefano Ceccherini rgb_color 4283583227cSStefano Ceccherini BStatusBar::BarColor() const 42952a38012Sejakowatz { 43052a38012Sejakowatz return fBarColor; 43152a38012Sejakowatz } 4323583227cSStefano Ceccherini 4333583227cSStefano Ceccherini 4343583227cSStefano Ceccherini float 4353583227cSStefano Ceccherini BStatusBar::BarHeight() const 43652a38012Sejakowatz { 4373583227cSStefano Ceccherini if (!fCustomBarHeight && fBarHeight == -1.0f) { 43852a38012Sejakowatz font_height fh; 43952a38012Sejakowatz GetFontHeight(&fh); 4403583227cSStefano Ceccherini const_cast<BStatusBar *>(this)->fBarHeight = fh.ascent + fh.descent + 6.0f; 44152a38012Sejakowatz } 44252a38012Sejakowatz 44352a38012Sejakowatz return fBarHeight; 44452a38012Sejakowatz } 4453583227cSStefano Ceccherini 4463583227cSStefano Ceccherini 4473583227cSStefano Ceccherini const char * 4483583227cSStefano Ceccherini BStatusBar::Text() const 44952a38012Sejakowatz { 45052a38012Sejakowatz return fText; 45152a38012Sejakowatz } 4523583227cSStefano Ceccherini 4533583227cSStefano Ceccherini 4543583227cSStefano Ceccherini const char * 4553583227cSStefano Ceccherini BStatusBar::TrailingText() const 45652a38012Sejakowatz { 45752a38012Sejakowatz return fTrailingText; 45852a38012Sejakowatz } 4593583227cSStefano Ceccherini 4603583227cSStefano Ceccherini 4613583227cSStefano Ceccherini const char * 4623583227cSStefano Ceccherini BStatusBar::Label() const 46352a38012Sejakowatz { 46452a38012Sejakowatz return fLabel; 46552a38012Sejakowatz } 4663583227cSStefano Ceccherini 4673583227cSStefano Ceccherini 4683583227cSStefano Ceccherini const char * 4693583227cSStefano Ceccherini BStatusBar::TrailingLabel() const 47052a38012Sejakowatz { 47152a38012Sejakowatz return fTrailingLabel; 47252a38012Sejakowatz } 4733583227cSStefano Ceccherini 4743583227cSStefano Ceccherini 4753583227cSStefano Ceccherini void 4763583227cSStefano Ceccherini BStatusBar::MouseDown(BPoint point) 47752a38012Sejakowatz { 47852a38012Sejakowatz BView::MouseDown(point); 47952a38012Sejakowatz } 4803583227cSStefano Ceccherini 4813583227cSStefano Ceccherini 4823583227cSStefano Ceccherini void 4833583227cSStefano Ceccherini BStatusBar::MouseUp(BPoint point) 48452a38012Sejakowatz { 48552a38012Sejakowatz BView::MouseUp(point); 48652a38012Sejakowatz } 4873583227cSStefano Ceccherini 4883583227cSStefano Ceccherini 4893583227cSStefano Ceccherini void 4903583227cSStefano Ceccherini BStatusBar::WindowActivated(bool state) 49152a38012Sejakowatz { 49252a38012Sejakowatz BView::WindowActivated(state); 49352a38012Sejakowatz } 4943583227cSStefano Ceccherini 4953583227cSStefano Ceccherini 4963583227cSStefano Ceccherini void 4973583227cSStefano Ceccherini BStatusBar::MouseMoved(BPoint point, uint32 transit, const BMessage *message) 49852a38012Sejakowatz { 49952a38012Sejakowatz BView::MouseMoved(point, transit, message); 50052a38012Sejakowatz } 5013583227cSStefano Ceccherini 5023583227cSStefano Ceccherini 5033583227cSStefano Ceccherini void 5043583227cSStefano Ceccherini BStatusBar::DetachedFromWindow() 50552a38012Sejakowatz { 50652a38012Sejakowatz BView::DetachedFromWindow(); 50752a38012Sejakowatz } 5083583227cSStefano Ceccherini 5093583227cSStefano Ceccherini 5103583227cSStefano Ceccherini void 5113583227cSStefano Ceccherini BStatusBar::FrameMoved(BPoint newPosition) 51252a38012Sejakowatz { 5133583227cSStefano Ceccherini BView::FrameMoved(newPosition); 51452a38012Sejakowatz } 5153583227cSStefano Ceccherini 5163583227cSStefano Ceccherini 5173583227cSStefano Ceccherini void 5183583227cSStefano Ceccherini BStatusBar::FrameResized(float newWidth, float newHeight) 51952a38012Sejakowatz { 5203583227cSStefano Ceccherini BView::FrameResized(newWidth, newHeight); 52152a38012Sejakowatz } 5223583227cSStefano Ceccherini 5233583227cSStefano Ceccherini 5243583227cSStefano Ceccherini BHandler * 5253583227cSStefano Ceccherini BStatusBar::ResolveSpecifier(BMessage *message, int32 index, 52652a38012Sejakowatz BMessage *specifier, 52752a38012Sejakowatz int32 what, const char *property) 52852a38012Sejakowatz { 52952a38012Sejakowatz return BView::ResolveSpecifier(message, index, specifier, what, property); 53052a38012Sejakowatz } 5313583227cSStefano Ceccherini 5323583227cSStefano Ceccherini 5333583227cSStefano Ceccherini void 5343583227cSStefano Ceccherini BStatusBar::ResizeToPreferred() 53552a38012Sejakowatz { 53652a38012Sejakowatz BView::ResizeToPreferred(); 53752a38012Sejakowatz } 5383583227cSStefano Ceccherini 5393583227cSStefano Ceccherini 5403583227cSStefano Ceccherini void 5418643b098SAxel Dörfler BStatusBar::GetPreferredSize(float* _width, float* _height) 54252a38012Sejakowatz { 5438643b098SAxel Dörfler if (_width) { 5448643b098SAxel Dörfler *_width = (fLabel ? (float)ceil(StringWidth(fLabel)) : 0.0f) 5458643b098SAxel Dörfler + (fTrailingLabel ? (float)ceil(StringWidth(fTrailingLabel)) : 0.0f) 5468643b098SAxel Dörfler + 7.0f; 5478643b098SAxel Dörfler } 54852a38012Sejakowatz 5498643b098SAxel Dörfler if (_height) { 5508643b098SAxel Dörfler font_height fontHeight; 5518643b098SAxel Dörfler GetFontHeight(&fontHeight); 5528643b098SAxel Dörfler 5538643b098SAxel Dörfler *_height = ceil(fontHeight.ascent + fontHeight.descent) + 5.0f + BarHeight(); 5548643b098SAxel Dörfler } 55552a38012Sejakowatz } 5563583227cSStefano Ceccherini 5573583227cSStefano Ceccherini 5583583227cSStefano Ceccherini void 5593583227cSStefano Ceccherini BStatusBar::MakeFocus(bool state) 56052a38012Sejakowatz { 56152a38012Sejakowatz BView::MakeFocus(state); 56252a38012Sejakowatz } 5633583227cSStefano Ceccherini 5643583227cSStefano Ceccherini 5653583227cSStefano Ceccherini void 5663583227cSStefano Ceccherini BStatusBar::AllAttached() 56752a38012Sejakowatz { 56852a38012Sejakowatz BView::AllAttached(); 56952a38012Sejakowatz } 5703583227cSStefano Ceccherini 5713583227cSStefano Ceccherini 5723583227cSStefano Ceccherini void 5733583227cSStefano Ceccherini BStatusBar::AllDetached() 57452a38012Sejakowatz { 57552a38012Sejakowatz BView::AllDetached(); 57652a38012Sejakowatz } 5773583227cSStefano Ceccherini 5783583227cSStefano Ceccherini 5793583227cSStefano Ceccherini status_t 5803583227cSStefano Ceccherini BStatusBar::GetSupportedSuites(BMessage *data) 58152a38012Sejakowatz { 58252a38012Sejakowatz return BView::GetSupportedSuites(data); 58352a38012Sejakowatz } 5843583227cSStefano Ceccherini 5853583227cSStefano Ceccherini 5863583227cSStefano Ceccherini status_t 5873583227cSStefano Ceccherini BStatusBar::Perform(perform_code d, void *arg) 58852a38012Sejakowatz { 5893583227cSStefano Ceccherini return BView::Perform(d, arg); 59052a38012Sejakowatz } 5913583227cSStefano Ceccherini 5923583227cSStefano Ceccherini 59352a38012Sejakowatz void BStatusBar::_ReservedStatusBar1() {} 59452a38012Sejakowatz void BStatusBar::_ReservedStatusBar2() {} 59552a38012Sejakowatz void BStatusBar::_ReservedStatusBar3() {} 59652a38012Sejakowatz void BStatusBar::_ReservedStatusBar4() {} 59752a38012Sejakowatz 5983583227cSStefano Ceccherini 5993583227cSStefano Ceccherini BStatusBar & 6003583227cSStefano Ceccherini BStatusBar::operator=(const BStatusBar &) 60152a38012Sejakowatz { 60252a38012Sejakowatz return *this; 60352a38012Sejakowatz } 60452a38012Sejakowatz 6053583227cSStefano Ceccherini 6063583227cSStefano Ceccherini void 6073583227cSStefano Ceccherini BStatusBar::InitObject(const char *label, const char *trailingLabel) 6083583227cSStefano Ceccherini { 6093583227cSStefano Ceccherini SetTextData(&fLabel, label); 6103583227cSStefano Ceccherini SetTextData(&fTrailingLabel, trailingLabel); 6113583227cSStefano Ceccherini } 6123583227cSStefano Ceccherini 6133583227cSStefano Ceccherini 6143583227cSStefano Ceccherini void 6153583227cSStefano Ceccherini BStatusBar::SetTextData(char **dest, const char *source) 6163583227cSStefano Ceccherini { 6173583227cSStefano Ceccherini ASSERT(dest != NULL); 6183583227cSStefano Ceccherini 6193583227cSStefano Ceccherini if (*dest != NULL) { 6203583227cSStefano Ceccherini free(*dest); 6213583227cSStefano Ceccherini *dest = NULL; 6223583227cSStefano Ceccherini } 6233583227cSStefano Ceccherini 62477e45e57SStefano Ceccherini if (source != NULL && source[0] != NULL) 6253583227cSStefano Ceccherini *dest = strdup(source); 6263583227cSStefano Ceccherini } 6273583227cSStefano Ceccherini 6283583227cSStefano Ceccherini 6293583227cSStefano Ceccherini void 6303583227cSStefano Ceccherini BStatusBar::FillBar(BRect rect) 6313583227cSStefano Ceccherini { 6323583227cSStefano Ceccherini // TODO: 6333583227cSStefano Ceccherini } 6343583227cSStefano Ceccherini 6353583227cSStefano Ceccherini 6363583227cSStefano Ceccherini void 6373583227cSStefano Ceccherini BStatusBar::Resize() 6383583227cSStefano Ceccherini { 6393583227cSStefano Ceccherini // TODO: 6403583227cSStefano Ceccherini } 6413583227cSStefano Ceccherini 6423583227cSStefano Ceccherini 6433583227cSStefano Ceccherini void 6443583227cSStefano Ceccherini BStatusBar::_Draw(BRect updateRect, bool barOnly) 6453583227cSStefano Ceccherini { 6463583227cSStefano Ceccherini // TODO: 6473583227cSStefano Ceccherini } 648