From 7d4a7d1c2461fac7242ca3201100fe2714e35ed7 Mon Sep 17 00:00:00 2001 From: plfiorini Date: Wed, 12 May 2010 18:59:17 +0000 Subject: [PATCH] Use status icons instead of simple circles. --- application/TheApp.h | 12 ++-- application/views/RosterItem.cpp | 100 +++++++++++++++++++++---------- application/views/RosterItem.h | 2 +- 3 files changed, 77 insertions(+), 37 deletions(-) diff --git a/application/TheApp.h b/application/TheApp.h index ecc6499..864e20b 100644 --- a/application/TheApp.h +++ b/application/TheApp.h @@ -1,5 +1,6 @@ /* - * Copyright 2009, Andrea Anzani. All rights reserved. + * Copyright 2009-2010, Andrea Anzani. All rights reserved. + * Copyright 2009-2010, Pier Luigi Fiorini. All rights reserved. * Distributed under the terms of the MIT License. */ #ifndef _THE_APP_H @@ -11,14 +12,15 @@ class TheApp : public BApplication { public: - TheApp(); + TheApp(); - void ReadyToRun(); + virtual void ReadyToRun(); + virtual void AboutRequested(); - MainWindow* GetMainWindow() const; + MainWindow* GetMainWindow() const; private: - MainWindow* fMainWin; + MainWindow* fMainWin; }; diff --git a/application/views/RosterItem.cpp b/application/views/RosterItem.cpp index 61c8185..b825af1 100644 --- a/application/views/RosterItem.cpp +++ b/application/views/RosterItem.cpp @@ -7,11 +7,12 @@ * Pier Luigi Fiorini, pierluigi.fiorini@gmail.com */ -#include - #include +#include + #include "CayaUtils.h" +#include "CayaResources.h" #include "ContactLinker.h" #include "NotifyMessage.h" #include "RosterItem.h" @@ -96,8 +97,8 @@ void RosterItem::DrawItem(BView* owner, BRect frame, bool complete) return; rgb_color highlightColor = ui_color(B_CONTROL_HIGHLIGHT_COLOR); - rgb_color highColor = owner->HighColor(); - rgb_color lowColor = owner->LowColor(); + rgb_color highColor = owner->HighColor(); + rgb_color lowColor = owner->LowColor(); // Draw selection if (IsSelected()) { @@ -110,54 +111,91 @@ void RosterItem::DrawItem(BView* owner, BRect frame, bool complete) owner->FillRect(frame); } - // Draw contact status - switch (fStatus) { - case CAYA_ONLINE: - owner->SetHighColor(CAYA_GREEN_COLOR); - break; - case CAYA_EXTENDED_AWAY: - case CAYA_AWAY: - owner->SetHighColor(CAYA_ORANGE_COLOR); - break; - case CAYA_DO_NOT_DISTURB: - owner->SetHighColor(CAYA_RED_COLOR); - break; - case CAYA_OFFLINE: - break; - default: - break; + BResources* res = CayaResources(); + if (res) { + int32 num = 0; + + switch (fStatus) { + case CAYA_ONLINE: + num = kOnlineIcon; + break; + case CAYA_EXTENDED_AWAY: + case CAYA_AWAY: + num = kAwayIcon; + break; + case CAYA_DO_NOT_DISTURB: + num = kBusyIcon; + break; + case CAYA_OFFLINE: + num = kOfflineIcon; + break; + default: + break; + } + + BBitmap* bitmap = IconFromResources(res, num, B_MINI_ICON); + BRect bitmapRect(frame.left + 2, frame.top + 2, + frame.left + 2 + 14, frame.top + 2 + 14); + + owner->SetDrawingMode(B_OP_ALPHA); + owner->SetBlendingMode(B_PIXEL_ALPHA, B_ALPHA_OVERLAY); + owner->DrawBitmap(bitmap, bitmap->Bounds(), + bitmapRect, B_FILTER_BITMAP_BILINEAR); + + delete res; + } else { + // Draw contact status + switch (fStatus) { + case CAYA_ONLINE: + owner->SetHighColor(CAYA_GREEN_COLOR); + break; + case CAYA_EXTENDED_AWAY: + case CAYA_AWAY: + owner->SetHighColor(CAYA_ORANGE_COLOR); + break; + case CAYA_DO_NOT_DISTURB: + owner->SetHighColor(CAYA_RED_COLOR); + break; + case CAYA_OFFLINE: + break; + default: + break; + } + + owner->FillEllipse(BRect(frame.left + 4, frame.top + 4, + frame.left + 4 + 10 , frame.top + 4 + 10)); } - owner->FillEllipse(BRect(frame.left + 6, frame.top + 6, - frame.left + 6 + 7 , frame.top + 6 + 7)); // Draw contact name - owner->MovePenTo(frame.left + 20, frame.top + myfBaselineOffset); - owner->SetHighColor(ui_color(B_CONTROL_TEXT_COLOR)); + owner->MovePenTo(frame.left + 20, frame.top + fBaselineOffset); + owner->SetHighColor(ui_color(B_CONTROL_TEXT_COLOR)); owner->DrawString(Text()); // Draw contact status string - owner->MovePenTo(frame.left + 20, frame.top + myfBaselineOffset + - myfBaselineOffset + 2); + owner->MovePenTo(frame.left + 20, frame.top + fBaselineOffset + + fBaselineOffset + 2); owner->SetHighColor(tint_color(lowColor, B_DARKEN_1_TINT)); - if (fPersonalStatus.Length() == 0) + if (fPersonalStatus.Length() == 0) owner->DrawString(CayaStatusToString(fStatus)); else owner->DrawString(fPersonalStatus); // Draw separator between items - owner->StrokeLine(BPoint(frame.left, frame.bottom), BPoint(frame.right, frame.bottom)); + owner->StrokeLine(BPoint(frame.left, frame.bottom), + BPoint(frame.right, frame.bottom)); // Draw avatar icon if (fBitmap != NULL) { float h = frame.Height() - 4; - BRect rect(frame.right - h - 2, frame.top + 2, frame.right - 2, frame.top + h ); + BRect rect(frame.right - h - 2, frame.top + 2, + frame.right - 2, frame.top + h ); owner->SetDrawingMode(B_OP_ALPHA); owner->SetBlendingMode(B_PIXEL_ALPHA, B_ALPHA_OVERLAY); owner->DrawBitmap(fBitmap, fBitmap->Bounds(), rect, B_FILTER_BITMAP_BILINEAR); } - owner->SetHighColor(highColor); + owner->SetHighColor(highColor); owner->SetLowColor(lowColor); } @@ -168,7 +206,7 @@ RosterItem::Update(BView* owner, const BFont* font) font_height fheight; font->GetHeight(&fheight); - myfBaselineOffset = 2 + ceilf(fheight.ascent + fheight.leading / 2); + fBaselineOffset = 2 + ceilf(fheight.ascent + fheight.leading / 2); SetHeight((ceilf(fheight.ascent) + ceilf(fheight.descent) + ceilf(fheight.leading) + 4 ) * 2); diff --git a/application/views/RosterItem.h b/application/views/RosterItem.h index 126165a..0ae9cc5 100644 --- a/application/views/RosterItem.h +++ b/application/views/RosterItem.h @@ -46,7 +46,7 @@ protected: private: ContactLinker* contactLinker; - float myfBaselineOffset; + float fBaselineOffset; BString fPersonalStatus; CayaStatus fStatus; BBitmap* fBitmap;