diff --git a/headers/os/interface/ListItem.h b/headers/os/interface/ListItem.h index 0e872c0392..c7972cb5c5 100644 --- a/headers/os/interface/ListItem.h +++ b/headers/os/interface/ListItem.h @@ -1,5 +1,5 @@ /* - * Copyright 2006-2007, Haiku, Inc. All Rights Reserved. + * Copyright 2006-2009, Haiku, Inc. All Rights Reserved. * Distributed under the terms of the MIT License. */ #ifndef _LIST_ITEM_H @@ -17,76 +17,81 @@ class BView; class BListItem : public BArchivable { - public: +public: BListItem(uint32 outlineLevel = 0, bool expanded = true); BListItem(BMessage* archive); - virtual ~BListItem(); + virtual ~BListItem(); - virtual status_t Archive(BMessage* archive, bool deep = true) const; + virtual status_t Archive(BMessage* archive, bool deep = true) const; - float Height() const; - float Width() const; - bool IsSelected() const; - void Select(); - void Deselect(); + float Height() const; + float Width() const; + bool IsSelected() const; + void Select(); + void Deselect(); - virtual void SetEnabled(bool enabled); - bool IsEnabled() const; + virtual void SetEnabled(bool enabled); + bool IsEnabled() const; - void SetHeight(float height); - void SetWidth(float width); - virtual void DrawItem(BView* owner, BRect frame, + void SetHeight(float height); + void SetWidth(float width); + virtual void DrawItem(BView* owner, BRect frame, bool complete = false) = 0; - virtual void Update(BView* owner, const BFont* font); + virtual void Update(BView* owner, const BFont* font); - virtual status_t Perform(perform_code code, void* arg); + virtual status_t Perform(perform_code code, void* arg); - bool IsExpanded() const; - void SetExpanded(bool expanded); - uint32 OutlineLevel() const; + bool IsExpanded() const; + void SetExpanded(bool expanded); + uint32 OutlineLevel() const; - private: - friend class BOutlineListView; - friend class BListView; - bool HasSubitems() const; +private: + friend class BOutlineListView; + friend class BListView; - virtual void _ReservedListItem1(); - virtual void _ReservedListItem2(); + bool HasSubitems() const; + + virtual void _ReservedListItem1(); + virtual void _ReservedListItem2(); BListItem(const BListItem& item); - BListItem& operator=(const BListItem& item); + BListItem& operator=(const BListItem& item); - bool IsItemVisible() const; - void SetItemVisible(bool visible); - inline float Top() const; - inline float Bottom() const; - void SetTop(float top); - private: - float fTop; - BList* fTemporaryList; - float fWidth; - float fHeight; - uint32 fLevel; - bool fSelected; - bool fEnabled; - bool fExpanded; - bool fHasSubitems : 1; - bool fVisible : 1; + bool IsItemVisible() const; + void SetItemVisible(bool visible); + inline float Top() const; + inline float Bottom() const; + void SetTop(float top); + +private: + float fTop; + BList* fTemporaryList; + float fWidth; + float fHeight; + uint32 fLevel; + bool fSelected; + bool fEnabled; + bool fExpanded; + bool fHasSubitems : 1; + bool fVisible : 1; }; + inline float BListItem::Top(void) const { return fTop; } + inline float BListItem::Bottom(void) const { - return (fTop + ceilf(fHeight) - 1.0); + return fTop + ceilf(fHeight) - 1.0; } + #include // to maintain source compatibility diff --git a/headers/os/interface/StringItem.h b/headers/os/interface/StringItem.h index c819fd79c4..c82dc85ebd 100644 --- a/headers/os/interface/StringItem.h +++ b/headers/os/interface/StringItem.h @@ -1,5 +1,5 @@ /* - * Copyright 2006, Haiku, Inc. All Rights Reserved. + * Copyright 2006-2009, Haiku, Inc. All Rights Reserved. * Distributed under the terms of the MIT License. */ #ifndef _STRING_ITEM_H @@ -10,33 +10,34 @@ class BStringItem : public BListItem { - public: - BStringItem(const char* text, uint32 outlineLevel = 0, - bool expanded = true); +public: + BStringItem(const char* text, + uint32 outlineLevel = 0, bool expanded = true); BStringItem(BMessage* archive); - virtual ~BStringItem(); + virtual ~BStringItem(); - static BArchivable* Instantiate(BMessage* archive); - virtual status_t Archive(BMessage* archive, bool deep = true) const; + static BArchivable* Instantiate(BMessage* archive); + virtual status_t Archive(BMessage* archive, bool deep = true) const; - virtual void DrawItem(BView* owner, BRect frame, bool complete = false); - virtual void SetText(const char* text); - const char* Text() const; + virtual void DrawItem(BView* owner, BRect frame, + bool complete = false); + virtual void SetText(const char* text); + const char* Text() const; - virtual void Update(BView* owner, const BFont* font); + virtual void Update(BView* owner, const BFont* font); - virtual status_t Perform(perform_code code, void* arg); + virtual status_t Perform(perform_code code, void* arg); - private: - virtual void _ReservedStringItem1(); - virtual void _ReservedStringItem2(); +private: + virtual void _ReservedStringItem1(); + virtual void _ReservedStringItem2(); BStringItem(const BStringItem& item); - BStringItem& operator=(const BStringItem& item); + BStringItem& operator=(const BStringItem& item); - char* fText; - float fBaselineOffset; - uint32 _reserved[2]; + char* fText; + float fBaselineOffset; + uint32 _reserved[2]; }; #endif // _STRING_ITEM_H diff --git a/src/kits/interface/Jamfile b/src/kits/interface/Jamfile index 5b87494199..3d9d4a1a4f 100644 --- a/src/kits/interface/Jamfile +++ b/src/kits/interface/Jamfile @@ -114,6 +114,7 @@ MergeObject interface_kit.o : SplitLayoutBuilder.cpp SplitView.cpp StatusBar.cpp + StringItem.cpp StringView.cpp TabView.cpp TextControl.cpp diff --git a/src/kits/interface/ListItem.cpp b/src/kits/interface/ListItem.cpp index 93256b9c84..8010fa1b4d 100644 --- a/src/kits/interface/ListItem.cpp +++ b/src/kits/interface/ListItem.cpp @@ -1,67 +1,48 @@ -//------------------------------------------------------------------------------ -// Copyright (c) 2001-2008, Haiku, Inc. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the "Software"), -// to deal in the Software without restriction, including without limitation -// the rights to use, copy, modify, merge, publish, distribute, sublicense, -// and/or sell copies of the Software, and to permit persons to whom the -// Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. -// -// File Name: ListItem.cpp -// Author: Ulrich Wimboeck -// Marc Flerackers (mflerackers@androme.be) -// Rene Gollent -// Description: BListItem is the base class for BListView's items, -// BStringItem is a subclass of BListItem which draws a string. -//------------------------------------------------------------------------------ -#include -#include +/* + * Copyright 2001-2009, Haiku, Inc. All Rights Reserved. + * Distributed under the terms of the MIT License. + * + * Authors: + * Ulrich Wimboeck + * Marc Flerackers (mflerackers@androme.be) + * Rene Gollent + */ #include + #include #include BListItem::BListItem(uint32 level, bool expanded) - : fTop(0.0), - fWidth(0), - fHeight(0), - fLevel(level), - fSelected(false), - fEnabled(true), - fExpanded(expanded), - fHasSubitems(false), - fVisible(true) + : + fTop(0.0), + fWidth(0), + fHeight(0), + fLevel(level), + fSelected(false), + fEnabled(true), + fExpanded(expanded), + fHasSubitems(false), + fVisible(true) { } -BListItem::BListItem(BMessage *data) - : BArchivable(data), - fTop(0.0), - fWidth(0), - fHeight(0), - fLevel(0), - fSelected(false), - fEnabled(true), - fExpanded(false), - fHasSubitems(false), - fVisible(true) +BListItem::BListItem(BMessage* data) + : BArchivable(data), + fTop(0.0), + fWidth(0), + fHeight(0), + fLevel(0), + fSelected(false), + fEnabled(true), + fExpanded(false), + fHasSubitems(false), + fVisible(true) { data->FindBool("_sel", &fSelected); - + if (data->FindBool("_disable", &fEnabled) != B_OK) fEnabled = true; else @@ -78,10 +59,9 @@ BListItem::~BListItem() status_t -BListItem::Archive(BMessage *archive, bool deep) const +BListItem::Archive(BMessage* archive, bool deep) const { status_t status = BArchivable::Archive(archive, deep); - if (status == B_OK && fSelected) status = archive->AddBool("_sel", true); @@ -162,18 +142,18 @@ BListItem::SetWidth(float width) void -BListItem::Update(BView *owner, const BFont *font) +BListItem::Update(BView* owner, const BFont* font) { font_height fh; font->GetHeight(&fh); SetWidth(owner->Bounds().Width()); - SetHeight(fh.ascent + fh.descent + fh.leading); + SetHeight(ceilf(fh.ascent + fh.descent + fh.leading)); } status_t -BListItem::Perform(perform_code d, void *arg) +BListItem::Perform(perform_code d, void* arg) { return BArchivable::Perform(d, arg); } @@ -211,174 +191,23 @@ void BListItem::_ReservedListItem1() {} void BListItem::_ReservedListItem2() {} -BListItem::BListItem(const BListItem &item) -{ -} - - -BListItem & -BListItem::operator=(const BListItem &) -{ - return *this; -} - - bool BListItem::IsItemVisible() const { return fVisible; } + void BListItem::SetTop(float top) { fTop = top; } + void BListItem::SetItemVisible(bool visible) { fVisible = visible; } - -// BStringItem -BStringItem::BStringItem(const char *text, uint32 level, bool expanded) - : BListItem(level, expanded), - fText(NULL), - fBaselineOffset(0) -{ - SetText(text); -} - - -BStringItem::BStringItem(BMessage *archive) - : BListItem(archive), - fText(NULL), - fBaselineOffset(0) -{ - const char *string; - - if (archive->FindString("_label", &string) == B_OK) - SetText(string); -} - - -BStringItem::~BStringItem() -{ - free(fText); -} - - -BArchivable * -BStringItem::Instantiate(BMessage *archive) -{ - if (validate_instantiation(archive, "BStringItem")) - return new BStringItem(archive); - else - return NULL; -} - - -status_t -BStringItem::Archive(BMessage *archive, bool deep) const -{ - status_t status = BListItem::Archive(archive); - - if (status == B_OK && fText != NULL) - status = archive->AddString("_label", fText); - - return status; -} - - -void -BStringItem::DrawItem(BView *owner, BRect frame, bool complete) -{ - if (fText == NULL) - return; - - rgb_color highColor = owner->HighColor(); - rgb_color lowColor = owner->LowColor(); - - if (IsSelected() || complete) { - if (IsSelected()) { - owner->SetHighColor(tint_color(lowColor, B_DARKEN_2_TINT)); - owner->SetLowColor(owner->HighColor()); - } else - owner->SetHighColor(lowColor); - - owner->FillRect(frame); - } - - owner->MovePenTo(frame.left, frame.top + fBaselineOffset); - - rgb_color black = {0, 0, 0, 255}; - - if (!IsEnabled()) - owner->SetHighColor(tint_color(black, B_LIGHTEN_2_TINT)); - else - owner->SetHighColor(black); - - owner->DrawString(fText); - - owner->SetHighColor(highColor); - owner->SetLowColor(lowColor); -} - - -void -BStringItem::SetText(const char *text) -{ - free(fText); - fText = NULL; - - if (text) - fText = strdup(text); -} - - -const char * -BStringItem::Text() const -{ - return fText; -} - - -void -BStringItem::Update(BView *owner, const BFont *font) -{ - if (fText) - SetWidth(owner->StringWidth(fText)); - - font_height fheight; - font->GetHeight(&fheight); - - fBaselineOffset = fheight.ascent + 2 + floorf(fheight.leading / 2); - - SetHeight(ceilf(fheight.ascent) + ceilf(fheight.descent) - + ceilf(fheight.leading) + 4); -} - - -status_t -BStringItem::Perform(perform_code d, void *arg) -{ - return BListItem::Perform(d, arg); -} - - -void BStringItem::_ReservedStringItem1() {} -void BStringItem::_ReservedStringItem2() {} - - -BStringItem::BStringItem(const BStringItem &) -{ -} - - -BStringItem & -BStringItem::operator=(const BStringItem &) -{ - return *this; -} diff --git a/src/kits/interface/StringItem.cpp b/src/kits/interface/StringItem.cpp new file mode 100644 index 0000000000..d9afb1337d --- /dev/null +++ b/src/kits/interface/StringItem.cpp @@ -0,0 +1,158 @@ +/* + * Copyright 2001-2009, Haiku, Inc. All Rights Reserved. + * Distributed under the terms of the MIT License. + * + * Authors: + * Ulrich Wimboeck + * Marc Flerackers (mflerackers@androme.be) + * Rene Gollent + */ + + +#include + +#include +#include + +#include +#include + + +BStringItem::BStringItem(const char* text, uint32 level, bool expanded) + : BListItem(level, expanded), + fText(NULL), + fBaselineOffset(0) +{ + SetText(text); +} + + +BStringItem::BStringItem(BMessage* archive) + : BListItem(archive), + fText(NULL), + fBaselineOffset(0) +{ + const char* string; + if (archive->FindString("_label", &string) == B_OK) + SetText(string); +} + + +BStringItem::~BStringItem() +{ + free(fText); +} + + +BArchivable* +BStringItem::Instantiate(BMessage* archive) +{ + if (validate_instantiation(archive, "BStringItem")) + return new BStringItem(archive); + + return NULL; +} + + +status_t +BStringItem::Archive(BMessage *archive, bool deep) const +{ + status_t status = BListItem::Archive(archive); + + if (status == B_OK && fText != NULL) + status = archive->AddString("_label", fText); + + return status; +} + + +void +BStringItem::DrawItem(BView *owner, BRect frame, bool complete) +{ + if (fText == NULL) + return; + + rgb_color highColor = owner->HighColor(); + rgb_color lowColor = owner->LowColor(); + + if (IsSelected() || complete) { + if (IsSelected()) { + owner->SetHighColor(tint_color(lowColor, B_DARKEN_2_TINT)); + owner->SetLowColor(owner->HighColor()); + } else + owner->SetHighColor(lowColor); + + owner->FillRect(frame); + } + + owner->MovePenTo(frame.left, frame.top + fBaselineOffset); + + rgb_color black = {0, 0, 0, 255}; + + if (!IsEnabled()) + owner->SetHighColor(tint_color(black, B_LIGHTEN_2_TINT)); + else + owner->SetHighColor(black); + + owner->DrawString(fText); + + owner->SetHighColor(highColor); + owner->SetLowColor(lowColor); +} + + +void +BStringItem::SetText(const char *text) +{ + free(fText); + fText = NULL; + + if (text) + fText = strdup(text); +} + + +const char * +BStringItem::Text() const +{ + return fText; +} + + +void +BStringItem::Update(BView *owner, const BFont *font) +{ + if (fText) + SetWidth(font->StringWidth(fText)); + + font_height fheight; + font->GetHeight(&fheight); + + fBaselineOffset = 2 + ceilf(fheight.ascent + fheight.leading / 2); + + SetHeight(ceilf(fheight.ascent) + ceilf(fheight.descent) + + ceilf(fheight.leading) + 4); +} + + +status_t +BStringItem::Perform(perform_code d, void *arg) +{ + return BListItem::Perform(d, arg); +} + + +void BStringItem::_ReservedStringItem1() {} +void BStringItem::_ReservedStringItem2() {} + + +BStringItem::BStringItem(const BStringItem &) +{ +} + + +BStringItem & +BStringItem::operator=(const BStringItem &) +{ + return *this; +}