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 2752a38012Sejakowatz // Standard Includes ----------------------------------------------------------- 2852a38012Sejakowatz #include <string.h> 29*30fd5147Shaydentech #include <stdlib.h> 3052a38012Sejakowatz 3152a38012Sejakowatz // System Includes ------------------------------------------------------------- 3252a38012Sejakowatz #include <StatusBar.h> 3352a38012Sejakowatz #include <Message.h> 3452a38012Sejakowatz #include <Errors.h> 3552a38012Sejakowatz 3652a38012Sejakowatz // Project Includes ------------------------------------------------------------ 3752a38012Sejakowatz 3852a38012Sejakowatz // Local Includes -------------------------------------------------------------- 3952a38012Sejakowatz 4052a38012Sejakowatz // Local Defines --------------------------------------------------------------- 4152a38012Sejakowatz 4252a38012Sejakowatz // Globals --------------------------------------------------------------------- 4352a38012Sejakowatz 4452a38012Sejakowatz //------------------------------------------------------------------------------ 4552a38012Sejakowatz BStatusBar::BStatusBar(BRect frame, const char *name, const char *label, 4652a38012Sejakowatz const char *trailingLabel) 47eb997429SMarc Flerackers : BView(frame, name, B_FOLLOW_LEFT | B_FOLLOW_TOP, B_WILL_DRAW), 4852a38012Sejakowatz fText(NULL), 4952a38012Sejakowatz fTrailingText(NULL), 5052a38012Sejakowatz fMax(100.0f), 5152a38012Sejakowatz fCurrent(0.0f), 5252a38012Sejakowatz fBarHeight(-1.0f), 5352a38012Sejakowatz fTrailingWidth(-1.0f), 5452a38012Sejakowatz fEraseText(-1.0f), 5552a38012Sejakowatz fEraseTrailingText(-1.0f), 5652a38012Sejakowatz fCustomBarHeight(false) 5752a38012Sejakowatz 5852a38012Sejakowatz { 5952a38012Sejakowatz fLabel = strdup(label); 6052a38012Sejakowatz fTrailingLabel = strdup(trailingLabel); 6152a38012Sejakowatz 6252a38012Sejakowatz fBarColor.red = 50; 6352a38012Sejakowatz fBarColor.green = 150; 6452a38012Sejakowatz fBarColor.blue = 255; 6552a38012Sejakowatz fBarColor.alpha = 255; 6652a38012Sejakowatz } 6752a38012Sejakowatz //------------------------------------------------------------------------------ 6852a38012Sejakowatz BStatusBar::BStatusBar(BMessage *archive) 6952a38012Sejakowatz : BView(archive), 7052a38012Sejakowatz fTrailingWidth(-1.0f), 7152a38012Sejakowatz fEraseText(-1.0f), 7252a38012Sejakowatz fEraseTrailingText(-1.0f), 7352a38012Sejakowatz fCustomBarHeight(false) 7452a38012Sejakowatz { 7552a38012Sejakowatz if (archive->FindFloat("_high", &fBarHeight) != B_OK) 7652a38012Sejakowatz fBarHeight = -1.0f; 7752a38012Sejakowatz 7852a38012Sejakowatz const void *ptr; 7952a38012Sejakowatz 8052a38012Sejakowatz if (archive->FindData("_bcolor", B_INT32_TYPE, &ptr, NULL ) != B_OK) 8152a38012Sejakowatz { 8252a38012Sejakowatz fBarColor.red = 50; 8352a38012Sejakowatz fBarColor.green = 150; 8452a38012Sejakowatz fBarColor.blue = 255; 8552a38012Sejakowatz fBarColor.alpha = 255; 8652a38012Sejakowatz } 8752a38012Sejakowatz else 8852a38012Sejakowatz memcpy(&fBarColor, ptr, sizeof(rgb_color)); 8952a38012Sejakowatz 9052a38012Sejakowatz if (archive->FindFloat("_val", &fCurrent) != B_OK) 9152a38012Sejakowatz fCurrent = 0.0f; 9252a38012Sejakowatz 9352a38012Sejakowatz if (archive->FindFloat("_max", &fMax) != B_OK) 9452a38012Sejakowatz fMax = 100.0f; 9552a38012Sejakowatz 9652a38012Sejakowatz const char *string; 9752a38012Sejakowatz 9852a38012Sejakowatz if (archive->FindString("_text", &string) != B_OK) 9952a38012Sejakowatz fText = NULL; 10052a38012Sejakowatz else 10152a38012Sejakowatz fText = strdup(string); 10252a38012Sejakowatz 10352a38012Sejakowatz if (archive->FindString("_ttext", &string) != B_OK) 10452a38012Sejakowatz fTrailingText = NULL; 10552a38012Sejakowatz else 10652a38012Sejakowatz fTrailingText = strdup(string); 10752a38012Sejakowatz 10852a38012Sejakowatz if (archive->FindString("_label", &string) != B_OK) 10952a38012Sejakowatz fLabel = NULL; 11052a38012Sejakowatz else 11152a38012Sejakowatz fLabel = strdup(string); 11252a38012Sejakowatz 11352a38012Sejakowatz if ( archive->FindString("_tlabel", &string) != B_OK) 11452a38012Sejakowatz fTrailingLabel = NULL; 11552a38012Sejakowatz else 11652a38012Sejakowatz fTrailingLabel = strdup(string); 11752a38012Sejakowatz } 11852a38012Sejakowatz //------------------------------------------------------------------------------ 11952a38012Sejakowatz BStatusBar::~BStatusBar() 12052a38012Sejakowatz { 12152a38012Sejakowatz if (fLabel) 122eb997429SMarc Flerackers free(fLabel); 12352a38012Sejakowatz 12452a38012Sejakowatz if (fTrailingLabel) 125eb997429SMarc Flerackers free(fTrailingLabel); 12652a38012Sejakowatz 12752a38012Sejakowatz if (fText) 128eb997429SMarc Flerackers free(fText); 12952a38012Sejakowatz 13052a38012Sejakowatz if (fTrailingText) 131eb997429SMarc Flerackers free(fTrailingText); 13252a38012Sejakowatz } 13352a38012Sejakowatz //------------------------------------------------------------------------------ 13452a38012Sejakowatz BArchivable *BStatusBar::Instantiate(BMessage *archive) 13552a38012Sejakowatz { 13652a38012Sejakowatz if (validate_instantiation(archive, "BStatusBar")) 13752a38012Sejakowatz return new BStatusBar(archive); 13852a38012Sejakowatz 13952a38012Sejakowatz return NULL; 14052a38012Sejakowatz } 14152a38012Sejakowatz //------------------------------------------------------------------------------ 14252a38012Sejakowatz status_t BStatusBar::Archive(BMessage *archive, bool deep) const 14352a38012Sejakowatz { 1448f3e1554SMarc Flerackers status_t err = BView::Archive(archive, deep); 1458f3e1554SMarc Flerackers 1468f3e1554SMarc Flerackers if (err != B_OK) 1478f3e1554SMarc Flerackers return err; 14852a38012Sejakowatz 14952a38012Sejakowatz if (fBarHeight != 16.0f) 1508f3e1554SMarc Flerackers err = archive->AddFloat("_high", fBarHeight); 1518f3e1554SMarc Flerackers 1528f3e1554SMarc Flerackers if (err != B_OK) 1538f3e1554SMarc Flerackers return err; 15452a38012Sejakowatz 15552a38012Sejakowatz // TODO: Should we compare the color with (50, 150, 255) ? 1568f3e1554SMarc Flerackers err = archive->AddData("_bcolor", B_INT32_TYPE, &fBarColor, sizeof( int32 )); 1578f3e1554SMarc Flerackers 1588f3e1554SMarc Flerackers if (err != B_OK) 1598f3e1554SMarc Flerackers return err; 16052a38012Sejakowatz 16152a38012Sejakowatz if (fCurrent != 0.0f) 1628f3e1554SMarc Flerackers err = archive->AddFloat("_val", fCurrent); 1638f3e1554SMarc Flerackers 1648f3e1554SMarc Flerackers if (err != B_OK) 1658f3e1554SMarc Flerackers return err; 16652a38012Sejakowatz 16752a38012Sejakowatz if (fMax != 100.0f ) 1688f3e1554SMarc Flerackers err = archive->AddFloat("_max", fMax); 1698f3e1554SMarc Flerackers 1708f3e1554SMarc Flerackers if (err != B_OK) 1718f3e1554SMarc Flerackers return err; 17252a38012Sejakowatz 17352a38012Sejakowatz if (fText ) 1748f3e1554SMarc Flerackers err = archive->AddString("_text", fText); 1758f3e1554SMarc Flerackers 1768f3e1554SMarc Flerackers if (err != B_OK) 1778f3e1554SMarc Flerackers return err; 17852a38012Sejakowatz 17952a38012Sejakowatz if (fTrailingText) 1808f3e1554SMarc Flerackers err = archive->AddString("_ttext", fTrailingText); 1818f3e1554SMarc Flerackers 1828f3e1554SMarc Flerackers if (err != B_OK) 1838f3e1554SMarc Flerackers return err; 18452a38012Sejakowatz 18552a38012Sejakowatz if (fLabel) 1868f3e1554SMarc Flerackers err = archive->AddString("_label", fLabel); 1878f3e1554SMarc Flerackers 1888f3e1554SMarc Flerackers if (err != B_OK) 1898f3e1554SMarc Flerackers return err; 19052a38012Sejakowatz 19152a38012Sejakowatz if (fTrailingLabel) 1928f3e1554SMarc Flerackers err = archive->AddString ("_tlabel", fTrailingLabel); 19352a38012Sejakowatz 1948f3e1554SMarc Flerackers return err; 19552a38012Sejakowatz } 19652a38012Sejakowatz //------------------------------------------------------------------------------ 19752a38012Sejakowatz void BStatusBar::AttachedToWindow() 19852a38012Sejakowatz { 19952a38012Sejakowatz float width, height; 20052a38012Sejakowatz GetPreferredSize(&width, &height); 20152a38012Sejakowatz ResizeTo(Frame().Width(), height); 20252a38012Sejakowatz 20352a38012Sejakowatz if (Parent()) 20452a38012Sejakowatz SetViewColor(Parent ()->ViewColor()); 20552a38012Sejakowatz } 20652a38012Sejakowatz //------------------------------------------------------------------------------ 20752a38012Sejakowatz void BStatusBar::MessageReceived(BMessage *message) 20852a38012Sejakowatz { 20952a38012Sejakowatz switch(message->what) 21052a38012Sejakowatz { 21152a38012Sejakowatz case B_UPDATE_STATUS_BAR: 21252a38012Sejakowatz { 21352a38012Sejakowatz float delta; 21452a38012Sejakowatz const char *text = NULL, *trailing_text = NULL; 21552a38012Sejakowatz 21652a38012Sejakowatz message->FindFloat("delta", &delta); 21752a38012Sejakowatz message->FindString("text", &text); 218eb997429SMarc Flerackers message->FindString("trailing text", &trailing_text); 21952a38012Sejakowatz 22052a38012Sejakowatz Update(delta, text, trailing_text); 22152a38012Sejakowatz 22252a38012Sejakowatz break; 22352a38012Sejakowatz } 22452a38012Sejakowatz case B_RESET_STATUS_BAR: 22552a38012Sejakowatz { 22652a38012Sejakowatz const char *label = NULL, *trailing_label = NULL; 22752a38012Sejakowatz 22852a38012Sejakowatz message->FindString("label", &label); 229eb997429SMarc Flerackers message->FindString("trailing label", &trailing_label); 23052a38012Sejakowatz 23152a38012Sejakowatz Reset(label, trailing_label); 23252a38012Sejakowatz 23352a38012Sejakowatz break; 23452a38012Sejakowatz } 23552a38012Sejakowatz default: 23652a38012Sejakowatz BView::MessageReceived ( message ); 23752a38012Sejakowatz } 23852a38012Sejakowatz } 23952a38012Sejakowatz //------------------------------------------------------------------------------ 24052a38012Sejakowatz void BStatusBar::Draw(BRect updateRect) 24152a38012Sejakowatz { 24252a38012Sejakowatz float width = Frame().Width(); 24352a38012Sejakowatz font_height fh; 24452a38012Sejakowatz GetFontHeight(&fh); 24552a38012Sejakowatz 24652a38012Sejakowatz SetHighColor(0, 0, 0); 2470dc199a5SMarc Flerackers MovePenTo(2.0f, (float)ceil(fh.ascent) + 1.0f); 2480dc199a5SMarc Flerackers 2490dc199a5SMarc Flerackers if (fLabel) 2500dc199a5SMarc Flerackers DrawString(fLabel); 2510dc199a5SMarc Flerackers if (fText) 2520dc199a5SMarc Flerackers DrawString(fText); 2530dc199a5SMarc Flerackers 2540dc199a5SMarc Flerackers if (fTrailingText) 2550dc199a5SMarc Flerackers { 2560dc199a5SMarc Flerackers if (fTrailingLabel) 2570dc199a5SMarc Flerackers { 2580dc199a5SMarc Flerackers MovePenTo(width - StringWidth(fTrailingText) - 2590dc199a5SMarc Flerackers StringWidth(fTrailingLabel) - 2.0f, 2600dc199a5SMarc Flerackers (float)ceil(fh.ascent) + 1.0f); 2610dc199a5SMarc Flerackers DrawString(fTrailingText); 2620dc199a5SMarc Flerackers DrawString(fTrailingLabel); 2630dc199a5SMarc Flerackers } 2640dc199a5SMarc Flerackers else 2650dc199a5SMarc Flerackers { 2660dc199a5SMarc Flerackers MovePenTo(width - StringWidth(fTrailingText) - 2.0f, 2670dc199a5SMarc Flerackers (float)ceil(fh.ascent) + 1.0f); 2680dc199a5SMarc Flerackers DrawString(fTrailingText); 26952a38012Sejakowatz } 27052a38012Sejakowatz 2710dc199a5SMarc Flerackers } 2720dc199a5SMarc Flerackers else if (fTrailingLabel) 2730dc199a5SMarc Flerackers { 2740dc199a5SMarc Flerackers MovePenTo(width - StringWidth(fTrailingLabel) - 2.0f, 2750dc199a5SMarc Flerackers (float)ceil(fh.ascent) + 1.0f); 2760dc199a5SMarc Flerackers DrawString(fTrailingLabel); 2770dc199a5SMarc Flerackers } 2780dc199a5SMarc Flerackers 2790dc199a5SMarc Flerackers BRect rect(0.0f, (float)ceil(fh.ascent) + 4.0f, width, 2800dc199a5SMarc Flerackers (float)ceil(fh.ascent) + 4.0f + fBarHeight); 28152a38012Sejakowatz 28252a38012Sejakowatz // First bevel 28352a38012Sejakowatz SetHighColor(tint_color(ui_color ( B_PANEL_BACKGROUND_COLOR ), B_DARKEN_1_TINT)); 28452a38012Sejakowatz StrokeLine(BPoint(rect.left, rect.bottom), BPoint(rect.left, rect.top)); 28552a38012Sejakowatz StrokeLine(BPoint(rect.right, rect.top)); 28652a38012Sejakowatz 28752a38012Sejakowatz SetHighColor(tint_color(ui_color(B_PANEL_BACKGROUND_COLOR), B_LIGHTEN_2_TINT)); 28852a38012Sejakowatz StrokeLine(BPoint(rect.left + 1.0f, rect.bottom), BPoint(rect.right, rect.bottom)); 28952a38012Sejakowatz StrokeLine(BPoint(rect.right, rect.top + 1.0f)); 29052a38012Sejakowatz 29152a38012Sejakowatz rect.InsetBy(1.0f, 1.0f); 29252a38012Sejakowatz 29352a38012Sejakowatz // Second bevel 29452a38012Sejakowatz SetHighColor(tint_color(ui_color ( B_PANEL_BACKGROUND_COLOR ), B_DARKEN_4_TINT)); 29552a38012Sejakowatz StrokeLine(BPoint(rect.left, rect.bottom), BPoint(rect.left, rect.top)); 29652a38012Sejakowatz StrokeLine(BPoint(rect.right, rect.top)); 29752a38012Sejakowatz 29852a38012Sejakowatz SetHighColor(ui_color(B_PANEL_BACKGROUND_COLOR)); 29952a38012Sejakowatz StrokeLine(BPoint(rect.left + 1.0f, rect.bottom), BPoint(rect.right, rect.bottom)); 30052a38012Sejakowatz StrokeLine(BPoint(rect.right, rect.top + 1.0f)); 30152a38012Sejakowatz 30252a38012Sejakowatz rect.InsetBy(1.0f, 1.0f); 30352a38012Sejakowatz 30452a38012Sejakowatz // Filling 30552a38012Sejakowatz SetHighColor(tint_color(ui_color(B_PANEL_BACKGROUND_COLOR), B_LIGHTEN_MAX_TINT)); 30652a38012Sejakowatz FillRect(rect); 30752a38012Sejakowatz 30852a38012Sejakowatz if (fCurrent != 0.0f) 30952a38012Sejakowatz { 31052a38012Sejakowatz rect.right = rect.left + (float)ceil(fCurrent * (width - 4) / fMax), 31152a38012Sejakowatz 31252a38012Sejakowatz // Bevel 31352a38012Sejakowatz SetHighColor(tint_color(fBarColor, B_LIGHTEN_2_TINT)); 31452a38012Sejakowatz StrokeLine(BPoint(rect.left, rect.bottom), BPoint(rect.left, rect.top)); 31552a38012Sejakowatz StrokeLine(BPoint(rect.right, rect.top)); 31652a38012Sejakowatz 31752a38012Sejakowatz SetHighColor(tint_color(fBarColor, B_DARKEN_2_TINT)); 31852a38012Sejakowatz StrokeLine(BPoint(rect.left, rect.bottom), BPoint(rect.right, rect.bottom)); 31952a38012Sejakowatz StrokeLine(BPoint(rect.right, rect.top)); 32052a38012Sejakowatz 32152a38012Sejakowatz rect.InsetBy(1.0f, 1.0f); 32252a38012Sejakowatz 32352a38012Sejakowatz // Filling 32452a38012Sejakowatz SetHighColor(fBarColor); 32552a38012Sejakowatz FillRect(rect); 32652a38012Sejakowatz } 32752a38012Sejakowatz } 32852a38012Sejakowatz //------------------------------------------------------------------------------ 32952a38012Sejakowatz void BStatusBar::SetBarColor(rgb_color color) 33052a38012Sejakowatz { 33152a38012Sejakowatz memcpy(&fBarColor, &color, sizeof(rgb_color)); 33252a38012Sejakowatz 33352a38012Sejakowatz Invalidate(); 33452a38012Sejakowatz } 33552a38012Sejakowatz //------------------------------------------------------------------------------ 33652a38012Sejakowatz void BStatusBar::SetBarHeight(float height) 33752a38012Sejakowatz { 33852a38012Sejakowatz BRect frame = Frame(); 33952a38012Sejakowatz 34052a38012Sejakowatz fBarHeight = height; 34152a38012Sejakowatz fCustomBarHeight = true; 34252a38012Sejakowatz ResizeTo(frame.Width(), fBarHeight + 16); 34352a38012Sejakowatz } 34452a38012Sejakowatz //------------------------------------------------------------------------------ 34552a38012Sejakowatz void BStatusBar::SetText ( const char *string ) 34652a38012Sejakowatz { 34752a38012Sejakowatz if (fText) 348eb997429SMarc Flerackers free(fText); 34952a38012Sejakowatz 35052a38012Sejakowatz fText = strdup(string); 35152a38012Sejakowatz 35252a38012Sejakowatz Invalidate(); 35352a38012Sejakowatz } 35452a38012Sejakowatz //------------------------------------------------------------------------------ 35552a38012Sejakowatz void BStatusBar::SetTrailingText(const char *string) 35652a38012Sejakowatz { 35752a38012Sejakowatz if (fTrailingText) 358eb997429SMarc Flerackers free(fTrailingText); 35952a38012Sejakowatz 36052a38012Sejakowatz fTrailingText = strdup(string); 36152a38012Sejakowatz 36252a38012Sejakowatz Invalidate(); 36352a38012Sejakowatz } 36452a38012Sejakowatz //------------------------------------------------------------------------------ 36552a38012Sejakowatz void BStatusBar::SetMaxValue(float max) 36652a38012Sejakowatz { 36752a38012Sejakowatz fMax = max; 36852a38012Sejakowatz 36952a38012Sejakowatz Invalidate(); 37052a38012Sejakowatz } 37152a38012Sejakowatz //------------------------------------------------------------------------------ 37252a38012Sejakowatz void BStatusBar::Update(float delta, const char *text, const char *trailingText) 37352a38012Sejakowatz { 37452a38012Sejakowatz fCurrent += delta; 37552a38012Sejakowatz 376f45d1cc7SMarc Flerackers if (fCurrent > fMax) 377f45d1cc7SMarc Flerackers fCurrent = fMax; 378f45d1cc7SMarc Flerackers 37952a38012Sejakowatz if (fText) 380eb997429SMarc Flerackers free(fText); 38152a38012Sejakowatz 38252a38012Sejakowatz fText = strdup(text); 38352a38012Sejakowatz 38452a38012Sejakowatz if (fTrailingText) 385eb997429SMarc Flerackers free(fTrailingText); 38652a38012Sejakowatz 38752a38012Sejakowatz fTrailingText = strdup(trailingText); 38852a38012Sejakowatz 38952a38012Sejakowatz Invalidate(); 39052a38012Sejakowatz } 39152a38012Sejakowatz //------------------------------------------------------------------------------ 39252a38012Sejakowatz void BStatusBar::Reset(const char *label, const char *trailingLabel) 39352a38012Sejakowatz { 39452a38012Sejakowatz if (fLabel) 395eb997429SMarc Flerackers free(fLabel); 39652a38012Sejakowatz 39752a38012Sejakowatz fLabel = strdup(label); 39852a38012Sejakowatz 39952a38012Sejakowatz if (fTrailingLabel) 400eb997429SMarc Flerackers free(fTrailingLabel); 40152a38012Sejakowatz 40252a38012Sejakowatz fTrailingLabel = strdup(trailingLabel); 40352a38012Sejakowatz 40452a38012Sejakowatz fCurrent = 0.0f; 40552a38012Sejakowatz 40652a38012Sejakowatz Invalidate(); 40752a38012Sejakowatz } 40852a38012Sejakowatz float BStatusBar::CurrentValue() const 40952a38012Sejakowatz { 41052a38012Sejakowatz return fCurrent; 41152a38012Sejakowatz } 41252a38012Sejakowatz //------------------------------------------------------------------------------ 41352a38012Sejakowatz float BStatusBar::MaxValue() const 41452a38012Sejakowatz { 41552a38012Sejakowatz return fMax; 41652a38012Sejakowatz } 41752a38012Sejakowatz //------------------------------------------------------------------------------ 41852a38012Sejakowatz rgb_color BStatusBar::BarColor() const 41952a38012Sejakowatz { 42052a38012Sejakowatz return fBarColor; 42152a38012Sejakowatz } 42252a38012Sejakowatz //------------------------------------------------------------------------------ 42352a38012Sejakowatz float BStatusBar::BarHeight() const 42452a38012Sejakowatz { 42552a38012Sejakowatz if (!fCustomBarHeight && fBarHeight == -1.0f) 42652a38012Sejakowatz { 42752a38012Sejakowatz font_height fh; 42852a38012Sejakowatz GetFontHeight(&fh); 42952a38012Sejakowatz ((BStatusBar*)this)->fBarHeight = fh.ascent + fh.descent + 6.0f; 43052a38012Sejakowatz } 43152a38012Sejakowatz 43252a38012Sejakowatz return fBarHeight; 43352a38012Sejakowatz } 43452a38012Sejakowatz //------------------------------------------------------------------------------ 43552a38012Sejakowatz const char *BStatusBar::Text() const 43652a38012Sejakowatz { 43752a38012Sejakowatz return fText; 43852a38012Sejakowatz } 43952a38012Sejakowatz //------------------------------------------------------------------------------ 44052a38012Sejakowatz const char *BStatusBar::TrailingText() const 44152a38012Sejakowatz { 44252a38012Sejakowatz return fTrailingText; 44352a38012Sejakowatz } 44452a38012Sejakowatz //------------------------------------------------------------------------------ 44552a38012Sejakowatz const char *BStatusBar::Label() const 44652a38012Sejakowatz { 44752a38012Sejakowatz return fLabel; 44852a38012Sejakowatz } 44952a38012Sejakowatz //------------------------------------------------------------------------------ 45052a38012Sejakowatz const char *BStatusBar::TrailingLabel() const 45152a38012Sejakowatz { 45252a38012Sejakowatz return fTrailingLabel; 45352a38012Sejakowatz } 45452a38012Sejakowatz //------------------------------------------------------------------------------ 45552a38012Sejakowatz void BStatusBar::MouseDown(BPoint point) 45652a38012Sejakowatz { 45752a38012Sejakowatz BView::MouseDown(point); 45852a38012Sejakowatz } 45952a38012Sejakowatz //------------------------------------------------------------------------------ 46052a38012Sejakowatz void BStatusBar::MouseUp(BPoint point) 46152a38012Sejakowatz { 46252a38012Sejakowatz BView::MouseUp(point); 46352a38012Sejakowatz } 46452a38012Sejakowatz //------------------------------------------------------------------------------ 46552a38012Sejakowatz void BStatusBar::WindowActivated(bool state) 46652a38012Sejakowatz { 46752a38012Sejakowatz BView::WindowActivated(state); 46852a38012Sejakowatz } 46952a38012Sejakowatz //------------------------------------------------------------------------------ 47052a38012Sejakowatz void BStatusBar::MouseMoved(BPoint point, uint32 transit, 47152a38012Sejakowatz const BMessage *message) 47252a38012Sejakowatz { 47352a38012Sejakowatz BView::MouseMoved(point, transit, message); 47452a38012Sejakowatz } 47552a38012Sejakowatz //------------------------------------------------------------------------------ 47652a38012Sejakowatz void BStatusBar::DetachedFromWindow() 47752a38012Sejakowatz { 47852a38012Sejakowatz BView::DetachedFromWindow(); 47952a38012Sejakowatz } 48052a38012Sejakowatz //------------------------------------------------------------------------------ 48152a38012Sejakowatz void BStatusBar::FrameMoved(BPoint new_position) 48252a38012Sejakowatz { 48352a38012Sejakowatz BView::FrameMoved(new_position); 48452a38012Sejakowatz } 48552a38012Sejakowatz //------------------------------------------------------------------------------ 48652a38012Sejakowatz void BStatusBar::FrameResized(float new_width, float new_height) 48752a38012Sejakowatz { 48852a38012Sejakowatz BView::FrameResized(new_width, new_height); 48952a38012Sejakowatz } 49052a38012Sejakowatz //------------------------------------------------------------------------------ 49152a38012Sejakowatz BHandler *BStatusBar::ResolveSpecifier(BMessage *message, int32 index, 49252a38012Sejakowatz BMessage *specifier, 49352a38012Sejakowatz int32 what, const char *property) 49452a38012Sejakowatz { 49552a38012Sejakowatz return BView::ResolveSpecifier(message, index, specifier, what, property); 49652a38012Sejakowatz } 49752a38012Sejakowatz //------------------------------------------------------------------------------ 49852a38012Sejakowatz void BStatusBar::ResizeToPreferred() 49952a38012Sejakowatz { 50052a38012Sejakowatz BView::ResizeToPreferred(); 50152a38012Sejakowatz } 50252a38012Sejakowatz //------------------------------------------------------------------------------ 50352a38012Sejakowatz void BStatusBar::GetPreferredSize(float *width, float *height) 50452a38012Sejakowatz { 50552a38012Sejakowatz font_height fh; 50652a38012Sejakowatz GetFontHeight(&fh); 50752a38012Sejakowatz 508eb997429SMarc Flerackers *width = (fLabel ? (float)ceil(StringWidth(fLabel)) : 0.0f) + 509eb997429SMarc Flerackers (fTrailingLabel ? (float)ceil(StringWidth(fTrailingLabel)) : 0.0f) + 510eb997429SMarc Flerackers 7.0f; 51152a38012Sejakowatz *height = fh.ascent + fh.descent + 5.0f + BarHeight(); 51252a38012Sejakowatz } 51352a38012Sejakowatz //------------------------------------------------------------------------------ 51452a38012Sejakowatz void BStatusBar::MakeFocus(bool state) 51552a38012Sejakowatz { 51652a38012Sejakowatz BView::MakeFocus(state); 51752a38012Sejakowatz } 51852a38012Sejakowatz //------------------------------------------------------------------------------ 51952a38012Sejakowatz void BStatusBar::AllAttached() 52052a38012Sejakowatz { 52152a38012Sejakowatz BView::AllAttached(); 52252a38012Sejakowatz } 52352a38012Sejakowatz //------------------------------------------------------------------------------ 52452a38012Sejakowatz void BStatusBar::AllDetached() 52552a38012Sejakowatz { 52652a38012Sejakowatz BView::AllDetached(); 52752a38012Sejakowatz } 52852a38012Sejakowatz //------------------------------------------------------------------------------ 52952a38012Sejakowatz status_t BStatusBar::GetSupportedSuites(BMessage *data) 53052a38012Sejakowatz { 53152a38012Sejakowatz return BView::GetSupportedSuites(data); 53252a38012Sejakowatz } 53352a38012Sejakowatz //------------------------------------------------------------------------------ 53452a38012Sejakowatz status_t BStatusBar::Perform(perform_code d, void *arg) 53552a38012Sejakowatz { 53652a38012Sejakowatz return B_ERROR; 53752a38012Sejakowatz } 53852a38012Sejakowatz //------------------------------------------------------------------------------ 53952a38012Sejakowatz void BStatusBar::_ReservedStatusBar1() {} 54052a38012Sejakowatz void BStatusBar::_ReservedStatusBar2() {} 54152a38012Sejakowatz void BStatusBar::_ReservedStatusBar3() {} 54252a38012Sejakowatz void BStatusBar::_ReservedStatusBar4() {} 54352a38012Sejakowatz 54452a38012Sejakowatz //------------------------------------------------------------------------------ 54552a38012Sejakowatz BStatusBar &BStatusBar::operator=(const BStatusBar &) 54652a38012Sejakowatz { 54752a38012Sejakowatz return *this; 54852a38012Sejakowatz } 54952a38012Sejakowatz //------------------------------------------------------------------------------ 55052a38012Sejakowatz void BStatusBar::InitObject(const char *l, const char *aux_l) 55152a38012Sejakowatz { 55252a38012Sejakowatz // TODO: 55352a38012Sejakowatz } 55452a38012Sejakowatz //------------------------------------------------------------------------------ 55552a38012Sejakowatz void BStatusBar::SetTextData(char **pp, const char *str) 55652a38012Sejakowatz { 55752a38012Sejakowatz // TODO: 55852a38012Sejakowatz } 55952a38012Sejakowatz //------------------------------------------------------------------------------ 56052a38012Sejakowatz void BStatusBar::FillBar(BRect r) 56152a38012Sejakowatz { 56252a38012Sejakowatz // TODO: 56352a38012Sejakowatz } 56452a38012Sejakowatz //------------------------------------------------------------------------------ 56552a38012Sejakowatz void BStatusBar::Resize() 56652a38012Sejakowatz { 56752a38012Sejakowatz // TODO: 56852a38012Sejakowatz } 56952a38012Sejakowatz //------------------------------------------------------------------------------ 57052a38012Sejakowatz void BStatusBar::_Draw(BRect updateRect, bool bar_only) 57152a38012Sejakowatz { 57252a38012Sejakowatz // TODO: 57352a38012Sejakowatz } 57452a38012Sejakowatz //------------------------------------------------------------------------------ 57552a38012Sejakowatz 57652a38012Sejakowatz /* 57752a38012Sejakowatz * $Log $ 57852a38012Sejakowatz * 57952a38012Sejakowatz * $Id $ 58052a38012Sejakowatz * 58152a38012Sejakowatz */ 582