6d8be225ca
StatusView now allows the selecting of accounts through a MenuButton with BitmapMenuItems― the button for selecting an account is nice and discrete, just showing the bitmap of a protocol (in leiu of a label). No functional changes, other than this menu. I tried making all AccountsMenus use BitmapMenuItems, but that gets unweildy pretty quickly― for now they remain in this menu. Maybe optional ownership of bitmaps in BitmapMenuItems and caching of protocol items would help.
114 lines
2.2 KiB
C++
114 lines
2.2 KiB
C++
/*
|
|
* Copyright 2009-2011, Andrea Anzani. All rights reserved.
|
|
* Copyright 2021, Jaidyn Levesque. All rights reserved.
|
|
* Distributed under the terms of the MIT License.
|
|
*
|
|
* Authors:
|
|
* Andrea Anzani, andrea.anzani@gmail.com
|
|
*/
|
|
|
|
#include "ImageCache.h"
|
|
|
|
#include <AppDefs.h>
|
|
#include <Bitmap.h>
|
|
#include <Debug.h>
|
|
#include <Resources.h>
|
|
#include <TranslationUtils.h>
|
|
|
|
#include <libinterface/BitmapUtils.h>
|
|
|
|
#include "AppResources.h"
|
|
#include "Utils.h"
|
|
|
|
|
|
ImageCache* ImageCache::fInstance = NULL;
|
|
|
|
|
|
ImageCache::ImageCache()
|
|
{
|
|
_LoadResource(kPersonIcon, "kPersonIcon");
|
|
_LoadResource(kOnePersonIcon, "kOnePersonIcon");
|
|
_LoadResource(kTwoPeopleIcon, "kTwoPeopleIcon");
|
|
_LoadResource(kThreePeopleIcon, "kThreePeopleIcon");
|
|
_LoadResource(kFourPeopleIcon, "kFourPeopleIcon");
|
|
_LoadResource(kMorePeopleIcon, "kMorePeopleIcon");
|
|
|
|
_LoadResource(kAwayReplicant, "kAwayReplicant");
|
|
_LoadResource(kBusyReplicant, "kBusyReplicant");
|
|
_LoadResource(kOfflineReplicant, "kOfflineReplicant");
|
|
_LoadResource(kOnlineReplicant, "kOnlineReplicant");
|
|
|
|
_LoadResource(kAsteriskIcon, "kAsteriskIcon");
|
|
}
|
|
|
|
|
|
ImageCache::~ImageCache()
|
|
{
|
|
while (fBitmaps.CountItems()) {
|
|
BBitmap* bit = fBitmaps.ValueFor(0);
|
|
delete bit;
|
|
}
|
|
}
|
|
|
|
|
|
ImageCache*
|
|
ImageCache::Get()
|
|
{
|
|
if (fInstance == NULL)
|
|
fInstance = new ImageCache();
|
|
return fInstance;
|
|
}
|
|
|
|
|
|
BBitmap*
|
|
ImageCache::GetImage(const char* keyName)
|
|
{
|
|
// Loads the bitmap if found
|
|
bool found;
|
|
BBitmap* bitmap = fBitmaps.ValueFor(BString(keyName), &found);
|
|
|
|
if (found == true)
|
|
return bitmap;
|
|
return NULL;
|
|
}
|
|
|
|
|
|
void
|
|
ImageCache::AddImage(BString name, BBitmap* which)
|
|
{
|
|
fBitmaps.AddItem(name, which);
|
|
}
|
|
|
|
|
|
void
|
|
ImageCache::DeleteImage(BString name)
|
|
{
|
|
BBitmap* bitmap = fBitmaps.ValueFor(name);
|
|
if (bitmap) {
|
|
fBitmaps.RemoveItemFor(name);
|
|
delete bitmap;
|
|
}
|
|
}
|
|
|
|
|
|
void
|
|
ImageCache::Release()
|
|
{
|
|
if (fInstance != NULL) {
|
|
delete fInstance;
|
|
fInstance = NULL;
|
|
}
|
|
}
|
|
|
|
|
|
void
|
|
ImageCache::_LoadResource(int identifier, const char* key)
|
|
{
|
|
BResources res = ChatResources();
|
|
if (res.InitCheck() != B_OK)
|
|
return;
|
|
BBitmap* bitmap = IconFromResources(&res, identifier, B_LARGE_ICON);
|
|
if (bitmap != NULL && bitmap->IsValid() == true)
|
|
fBitmaps.AddItem(BString(key), bitmap);
|
|
}
|