Renga/ui/PeopleListItem.cpp

67 lines
1.7 KiB
C++

//////////////////////////////////////////////////
// Jabber [PeopleListItem.cpp]
//////////////////////////////////////////////////
#include "PeopleListItem.h"
#include <interface/Font.h>
#include <interface/View.h>
#include "jabber/JabberSpeak.h"
PeopleListItem::PeopleListItem(std::string user, gloox::MUCRoomAffiliation affiliation)
: BListItem() {
_user = user;
fAffiliation = affiliation;
}
PeopleListItem::~PeopleListItem() {
}
void PeopleListItem::DrawItem(BView *owner, BRect frame, __attribute__((unused)) bool complete) {
// clear rectangle
if (IsSelected()) {
owner->SetLowUIColor(B_LIST_SELECTED_BACKGROUND_COLOR);
owner->SetHighUIColor(B_LIST_SELECTED_ITEM_TEXT_COLOR);
} else {
owner->SetLowUIColor(B_LIST_BACKGROUND_COLOR);
owner->SetHighUIColor(B_LIST_ITEM_TEXT_COLOR);
}
owner->FillRect(frame, B_SOLID_LOW);
// construct text positioning
font_height fh;
owner->GetFontHeight(&fh);
float height = fh.ascent + fh.descent;
float vpos = frame.bottom - (frame.Height() - height) / 2 - fh.descent;
// draw information
owner->DrawString(User().c_str(), BPoint(frame.left + 5.0, vpos));
BPoint affiliationPos(frame.right - owner->StringWidth("@") - 5.0, vpos);
if (fAffiliation == gloox::AffiliationOwner)
owner->DrawString("&", affiliationPos);
else if (fAffiliation == gloox::AffiliationAdmin)
owner->DrawString("@", affiliationPos);
}
void PeopleListItem::Update(BView *owner, const BFont *font) {
BListItem::Update(owner, font);
// set height to accomodate graphics and text
font_height fh;
owner->GetFontHeight(&fh);
float height = fh.ascent + fh.descent;
SetHeight(height);
}
std::string PeopleListItem::User() const {
return _user;
}