Chat-O-Matic/application/ImageCache.cpp
Jaidyn Ann 6d8be225ca Scaffolding of a multi-account StatusView
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.
2021-08-02 21:59:44 -05:00

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);
}