diff --git a/application/AppResources.h b/application/AppResources.h index 7e62ce9..1a28189 100644 --- a/application/AppResources.h +++ b/application/AppResources.h @@ -25,7 +25,11 @@ enum { kReplicantMessageReceived = 1402, kPersonIcon = 1500, - kChatIcon = 1501 + kOnePersonIcon = 1501, + kTwoPeopleIcon = 1502, + kThreePeopleIcon = 1503, + kFourPeopleIcon = 1504, + kMorePeopleIcon = 1505 }; #endif // _APP_RESOURCES_H diff --git a/application/Conversation.cpp b/application/Conversation.cpp index a1cb2d5..f23979c 100644 --- a/application/Conversation.cpp +++ b/application/Conversation.cpp @@ -37,7 +37,7 @@ Conversation::Conversation(BString id, BMessenger msgn) fMessenger(msgn), fChatView(NULL), fLooper(NULL), - fIcon(ImageCache::Get()->GetImage("kChatIcon")), + fIcon(ImageCache::Get()->GetImage("kOnePersonIcon")), fDateFormatter(), fRoomFlags(0), fDisallowedFlags(0), @@ -431,6 +431,7 @@ Conversation::RemoveUser(User* user) user->UnregisterObserver(this); GetView()->UpdateUserList(fUsers); _SortConversationList(); + _UpdateIcon(); } @@ -589,8 +590,7 @@ Conversation::_EnsureUser(BMessage* msg) fUsers.AddItem(id, serverUser); user = serverUser; GetView()->UpdateUserList(fUsers); - - _AdoptUserIcon(user); + _UpdateIcon(user); } // Not anywhere; create user else if (user == NULL) { @@ -600,8 +600,7 @@ Conversation::_EnsureUser(BMessage* msg) fLooper->AddUser(user); fUsers.AddItem(id, user); GetView()->UpdateUserList(fUsers); - - _AdoptUserIcon(user); + _UpdateIcon(user); } if (name.IsEmpty() == false) { @@ -631,19 +630,52 @@ Conversation::_GetRole(BMessage* msg) void -Conversation::_AdoptUserIcon(User* user) +Conversation::_UpdateIcon(User* user) { - // If it's a one-on-one chat without custom icon, steal a user's - if ((fUsers.CountItems() <= 2 && user->GetId() != GetOwnContact()->GetId()) - && (fIcon == ImageCache::Get()->GetImage("kChatIcon") - || fIcon == NULL)) - fUserIcon = SetIconBitmap(user->AvatarBitmap()); + if (_IsDefaultIcon(fIcon) == false && fUserIcon == false) + return; - // If it's no longer one-on-one, revert - if (fUsers.CountItems() > 2 && fUserIcon == true) { - SetIconBitmap(ImageCache::Get()->GetImage("kChatIcon")); - fUserIcon = false; + // If it's a one-on-one chat, try to use the other user's icon + if (user != NULL && fUsers.CountItems() == 2 + && user->GetId() != GetOwnContact()->GetId() + && _IsDefaultIcon(user->AvatarBitmap()) == false) { + fUserIcon = SetIconBitmap(user->AvatarBitmap()); + return; } + + switch (fUsers.CountItems()) + { + case 0: + case 1: + SetIconBitmap(ImageCache::Get()->GetImage("kOnePersonIcon")); + break; + case 2: + SetIconBitmap(ImageCache::Get()->GetImage("kTwoPeopleIcon")); + break; + case 3: + SetIconBitmap(ImageCache::Get()->GetImage("kThreePeopleIcon")); + break; + case 4: + SetIconBitmap(ImageCache::Get()->GetImage("kFourPeopleIcon")); + break; + default: + SetIconBitmap(ImageCache::Get()->GetImage("kMorePeopleIcon")); + break; + } + fUserIcon = false; +} + + +bool +Conversation::_IsDefaultIcon(BBitmap* icon) +{ + return (icon == NULL + || icon == ImageCache::Get()->GetImage("kPersonIcon") + || icon == ImageCache::Get()->GetImage("kOnePersonIcon") + || icon == ImageCache::Get()->GetImage("kTwoPeopleIcon") + || icon == ImageCache::Get()->GetImage("kThreePeopleIcon") + || icon == ImageCache::Get()->GetImage("kFourPeopleIcon") + || icon == ImageCache::Get()->GetImage("kMorePeopleIcon")); } diff --git a/application/Conversation.h b/application/Conversation.h index ed1d05d..7fee6d7 100644 --- a/application/Conversation.h +++ b/application/Conversation.h @@ -87,7 +87,8 @@ private: User* _EnsureUser(BMessage* msg); Role* _GetRole(BMessage* msg); - void _AdoptUserIcon(User* user); + void _UpdateIcon(User* user = NULL); + bool _IsDefaultIcon(BBitmap* icon); void _SortConversationList(); diff --git a/application/ImageCache.cpp b/application/ImageCache.cpp index 143d016..4216a08 100644 --- a/application/ImageCache.cpp +++ b/application/ImageCache.cpp @@ -27,7 +27,11 @@ ImageCache* ImageCache::fInstance = NULL; ImageCache::ImageCache() { _LoadResource(kPersonIcon, "kPersonIcon"); - _LoadResource(kChatIcon, "kChatIcon"); + _LoadResource(kOnePersonIcon, "kOnePersonIcon"); + _LoadResource(kTwoPeopleIcon, "kTwoPeopleIcon"); + _LoadResource(kThreePeopleIcon, "kThreePeopleIcon"); + _LoadResource(kFourPeopleIcon, "kFourPeopleIcon"); + _LoadResource(kMorePeopleIcon, "kMorePeopleIcon"); _LoadResource(kAwayReplicant, "kAwayReplicant"); _LoadResource(kBusyReplicant, "kBusyReplicant"); diff --git a/application/Makefile b/application/Makefile index d41617e..463f080 100644 --- a/application/Makefile +++ b/application/Makefile @@ -100,7 +100,11 @@ RDEFS = Cardie.rdef \ data/icons/replicant/MessageReceived.rdef \ data/icons/replicant/Offline.rdef \ data/icons/replicant/Online.rdef \ - data/icons/misc/Chat.rdef \ + data/icons/misc/People-1.rdef \ + data/icons/misc/People-2.rdef \ + data/icons/misc/People-3.rdef \ + data/icons/misc/People-4.rdef \ + data/icons/misc/People-4+.rdef \ data/icons/misc/Person.rdef \ data/icons/misc/Search.rdef \ data/icons/misc/Tool.rdef diff --git a/data/icons/misc/Chat b/data/icons/misc/Chat deleted file mode 100644 index 2750488..0000000 Binary files a/data/icons/misc/Chat and /dev/null differ diff --git a/data/icons/misc/Chat.rdef b/data/icons/misc/Chat.rdef deleted file mode 100644 index a6aff78..0000000 --- a/data/icons/misc/Chat.rdef +++ /dev/null @@ -1,9 +0,0 @@ -#include "application/AppResources.h" - -resource(kChatIcon) #'VICN' array { - $"6E63696604052803010100020106023E80000000000000003D800048C0004940" - $"0000F8E278FFFAECA9020106023E80000000000000003D800048000049000000" - $"FFFFFFFFF3E6AA010606BF0F3C30C36F30B8E030244024BC3A24C3453C50B8E0" - $"503C584858C160C5C14458C512C4DF544054C28454BC3A040A00010030282401" - $"158802040A0201002028240A01010030201401158802040A030100202014" -}; diff --git a/data/icons/misc/People-1 b/data/icons/misc/People-1 new file mode 100644 index 0000000..51092eb Binary files /dev/null and b/data/icons/misc/People-1 differ diff --git a/data/icons/misc/People-1.rdef b/data/icons/misc/People-1.rdef new file mode 100644 index 0000000..535f75d --- /dev/null +++ b/data/icons/misc/People-1.rdef @@ -0,0 +1,27 @@ +#include "application/AppResources.h" + +resource(kOnePersonIcon) #'VICN' array { + $"6E636966120500020006023CADF43D104EBF02CA3EA2224BB02046648D00FFDB" + $"97FFFCAF29020006023CADF43D104EBF02CA3EA2224BB02046648D00D5DCFFFF" + $"9D9BD5020006023B804A3C0065BF02CA3EA2224BE70846C45D00EE9BB0FFCC58" + $"76020006023A6496BA3F153EBCDD3EEA9147D96A4458AB00FFF7EAFEFDD17B02" + $"0006023A6496BA3F153EBCDD3EEA9147D96A4458AB00FFFFFFFEA4A3D7020006" + $"023A6496BA3F153EBCDD3EEA9147D96A4458AB00FFE3EAFEF0A8BB020006023A" + $"B3673751B2BC59783FD2D74AF3F147385900C85805FFF06306020006023AB367" + $"3751B2BC59783FD2D74B03F147385900373583FF6967C0020006023AB3673751" + $"B2BC59783FD2D74B13F147785900A02646FFD53961020106033ABB7400000000" + $"00003AB5E049D1B1471E5B00F2F2F2AB7D7A7AFFBCA18404016C03A329040325" + $"23820371152D02000602388A280000000000004000004A3000C2000000C85804" + $"FFDC952F02000602388A280000000000004000004A4000C200000033318CFFA4" + $"A3D702000602388A280000000000004000004A4000C3000000AB123AFFDD718D" + $"0A0A0D36353646384838593C5B3E5B3E5C425E4858484A4A484A373D310A0B36" + $"353645384838593C5B3E5B3E5C425E424D444D443B0A063635443B4A374036C1" + $"57BAF73D310A08444D424D425E4858484A4A484A37443B0204402843283D283A" + $"2E3A2B3A3140343D344334462E4631462B02043F2AC0592ABE5B2A3A2F3AB7FB" + $"3AB9F93F34BE5B34C05934442F44B9F944B7FB0607FE1B3A5F445F3F5F495FC7" + $"38CAF4C569CAE4CB5ACB1BCA0FC8AACC99C976C888C82F4E5552574C54425458" + $"0A04424D4253484A444D0A0340364A3744340A043C5B3E5B3E4D3C4C0A0A0B01" + $"06023FDBA60000000000003FC3C34069E943C3C30A0001001001178400040A02" + $"0101000A050102000A080103000A0D0107000A100108000A0001041001178400" + $"040A0A0104000A0801090815FF" +}; diff --git a/data/icons/misc/People-2 b/data/icons/misc/People-2 new file mode 100644 index 0000000..2ac2449 Binary files /dev/null and b/data/icons/misc/People-2 differ diff --git a/data/icons/misc/People-2.rdef b/data/icons/misc/People-2.rdef new file mode 100644 index 0000000..5f53659 --- /dev/null +++ b/data/icons/misc/People-2.rdef @@ -0,0 +1,25 @@ +#include "application/AppResources.h" + +resource(kTwoPeopleIcon) #'VICN' array { + $"6E6369660D0500020006023CADF43D104EBF02CA3EA2224BB02046648D00FFDB" + $"97FFFCAF29020006023CADF43D104EBF02CA3EA2224BB02046648D00D5DCFFFF" + $"9D9BD5020006023A6496BA3F153EBCDD3EEA9147D96A4458AB00FFF7EAFEFDD1" + $"7B020006023A6496BA3F153EBCDD3EEA9147D96A4458AB00FFFFFFFEA4A3D702" + $"0006023AB3673751B2BC59783FD2D74AF3F147385900C85805FFF06306020006" + $"023AB3673751B2BC59783FD2D74B03F147385900373583FF6967C0020106033A" + $"BB740000000000003AB5E049D1B1471E5B00F2F2F2AB7D7A7AFFBCA18404016C" + $"03A329040325238202000602388A280000000000004000004A3000C2000000C8" + $"5804FFDC952F02000602388A280000000000004000004A4000C200000033318C" + $"FFA4A3D70A0A0D36353646384838593C5B3E5B3E5C425E4858484A4A484A373D" + $"310A0B36353645384838593C5B3E5B3E5C425E424D444D443B0A063635443B4A" + $"374036C157BAF73D310A08444D424D425E4858484A4A484A37443B0204402843" + $"283D283A2E3A2B3A3140343D344334462E4631462B02043F2AC0592ABE5B2A3A" + $"2F3AB7FB3AB9F93F34BE5B34C05934442F44B9F944B7FB0607FE2B42604D6048" + $"605260585E535FCC70CB135C585F5AC98AC8665D53CBEDC8915C51544F3C4E0A" + $"04424D4253484A444D0A0340364A3744340A043C5B3E5B3E4D3C4C130A080106" + $"000A00010030101A01178400040A01010120101A0A03010220101A0A05010320" + $"101A0A09010720101A0A0B010820101A0A00010530101A01178400040A070105" + $"20101A0A05010928101A15FF0A0001001001178400040A020101000A04010200" + $"0A060103000A0A0107000A0C0108000A0001041001178400040A070104000A06" + $"01090815FF" +}; diff --git a/data/icons/misc/People-3 b/data/icons/misc/People-3 new file mode 100644 index 0000000..78e9fea Binary files /dev/null and b/data/icons/misc/People-3 differ diff --git a/data/icons/misc/People-3.rdef b/data/icons/misc/People-3.rdef new file mode 100644 index 0000000..d8b7061 --- /dev/null +++ b/data/icons/misc/People-3.rdef @@ -0,0 +1,31 @@ +#include "application/AppResources.h" + +resource(kThreePeopleIcon) #'VICN' array { + $"6E636966120500020006023CADF43D104EBF02CA3EA2224BB02046648D00FFDB" + $"97FFFCAF29020006023CADF43D104EBF02CA3EA2224BB02046648D00D5DCFFFF" + $"9D9BD5020006023B804A3C0065BF02CA3EA2224BE70846C45D00EE9BB0FFCC58" + $"76020006023A6496BA3F153EBCDD3EEA9147D96A4458AB00FFF7EAFEFDD17B02" + $"0006023A6496BA3F153EBCDD3EEA9147D96A4458AB00FFFFFFFEA4A3D7020006" + $"023A6496BA3F153EBCDD3EEA9147D96A4458AB00FFE3EAFEF0A8BB020006023A" + $"B3673751B2BC59783FD2D74AF3F147385900C85805FFF06306020006023AB367" + $"3751B2BC59783FD2D74B03F147385900373583FF6967C0020006023AB3673751" + $"B2BC59783FD2D74B13F147785900A02646FFD53961020106033ABB7400000000" + $"00003AB5E049D1B1471E5B00F2F2F2AB7D7A7AFFBCA18404016C03A329040325" + $"23820371152D02000602388A280000000000004000004A3000C2000000C85804" + $"FFDC952F02000602388A280000000000004000004A4000C200000033318CFFA4" + $"A3D702000602388A280000000000004000004A4000C3000000AB123AFFDD718D" + $"0A0A0D36353646384838593C5B3E5B3E5C425E4858484A4A484A373D310A0B36" + $"353645384838593C5B3E5B3E5C425E424D444D443B0A063635443B4A374036C1" + $"57BAF73D310A08444D424D425E4858484A4A484A37443B0204402843283D283A" + $"2E3A2B3A3140343D344334462E4631462B02043F2AC0592ABE5B2A3A2F3AB7FB" + $"3AB9F93F34BE5B34C05934442F44B9F944B7FB0607FE2B42604D604860526058" + $"5E535FCC70CB135C585F5AC98AC8665D53CBEDC8915C51544F4A580A04424D42" + $"53484A444D0A0340364A3744340A043C5B3E5B3E4D3C4C1B0A0B0106000A0001" + $"00302A1A01178400040A030101202A1A0A060102202A1A0A090103202A1A0A0E" + $"0107202A1A0A110108202A1A0A000105302C1A01178400040A0A0105202C1A0A" + $"00010030101A01178400040A01010120101A0A04010220101A0A07010320101A" + $"0A0C010720101A0A0F010820101A0A00010530101A01178400040A0A01052010" + $"1A0A07010928101A15FF0A0001001001178400040A020101000A050102000A08" + $"0103000A0D0107000A100108000A0001041001178400040A0A0104000A080109" + $"0815FF" +}; diff --git a/data/icons/misc/People-4 b/data/icons/misc/People-4 new file mode 100644 index 0000000..79aed7e Binary files /dev/null and b/data/icons/misc/People-4 differ diff --git a/data/icons/misc/People-4+ b/data/icons/misc/People-4+ new file mode 100644 index 0000000..fe0ebc3 Binary files /dev/null and b/data/icons/misc/People-4+ differ diff --git a/data/icons/misc/People-4+.rdef b/data/icons/misc/People-4+.rdef new file mode 100644 index 0000000..18b8f57 --- /dev/null +++ b/data/icons/misc/People-4+.rdef @@ -0,0 +1,36 @@ +#include "application/AppResources.h" + +resource(kMorePeopleIcon) #'VICN' array { + $"6E636966150500020006023CADF43D104EBF02CA3EA2224BB02046648D00FFDB" + $"97FFFCAF29020006023CADF43D104EBF02CA3EA2224BB02046648D00D5DCFFFF" + $"9D9BD5020006023B804A3C0065BF02CA3EA2224BE70846C45D00EE9BB0FFCC58" + $"76020006023A6496BA3F153EBCDD3EEA9147D96A4458AB00FFF7EAFEFDD17B02" + $"0006023A6496BA3F153EBCDD3EEA9147D96A4458AB00FFFFFFFEA4A3D7020006" + $"023A6496BA3F153EBCDD3EEA9147D96A4458AB00FFE3EAFEF0A8BB020006023A" + $"B3673751B2BC59783FD2D74AF3F147385900C85805FFF06306020006023AB367" + $"3751B2BC59783FD2D74B03F147385900373583FF6967C0020006023AB3673751" + $"B2BC59783FD2D74B13F147785900A02646FFD53961020106033ABB7400000000" + $"00003AB5E049D1B1471E5B00F2F2F2AB7D7A7AFFBCA18404016C03A329040325" + $"23820371152D02000602388A280000000000004000004A3000C2000000C85804" + $"FFDC952F02000602388A280000000000004000004A4000C200000033318CFFA4" + $"A3D702000602388A280000000000004000004A4000C3000000AB123AFFDD718D" + $"0400660501020006020000003C6000C000000000004C000048A0000000AAFFFC" + $"00FFAA0B0A0D36353646384838593C5B3E5B3E5C425E4858484A4A484A373D31" + $"0A0B36353645384838593C5B3E5B3E5C425E424D444D443B0A063635443B4A37" + $"4036C157BAF73D310A08444D424D425E4858484A4A484A37443B020440284328" + $"3D283A2E3A2B3A3140343D344334462E4631462B02043F2AC0592ABE5B2A3A2F" + $"3AB7FB3AB9F93F34BE5B34C05934442F44B9F944B7FB0607FE2B42604D604860" + $"5260585E535FCC70CB135C585F5AC98AC8665D53CBEDC8915C51544F4A580A04" + $"424D4253484A444D0A0340364A3744340A043C5B3E5B3E4D3C4C0A0C3A223022" + $"30302230223A303A30483A483A3A483A48303A30220A0B0106000A0501022019" + $"170A1101082019170A000105301B1701178400040A0A0105201B170A00010030" + $"2A1A01178400040A030101202A1A0A060102202A1A0A090103202A1A0A0E0107" + $"202A1A0A110108202A1A0A000105302C1A01178400040A0A0105202C1A0A0001" + $"0030101A01178400040A01010120101A0A04010220101A0A07010320101A0A0C" + $"010720101A0A0F010820101A0A00010530101A01178400040A0A010520101A0A" + $"07010928101A15FF0A0001001001178400040A020101000A050102000A080103" + $"000A0D0107000A100108000A0001041001178400040A0A0104000A0801090815" + $"FF0A12010A123E00000000000000003DD1744A70004A8F4501178322040A1301" + $"0A123E00000000000000003DD1744A60004A800001178322040A14010A023E00" + $"000000000000003DD1744A60004A8000" +}; diff --git a/data/icons/misc/People-4.rdef b/data/icons/misc/People-4.rdef new file mode 100644 index 0000000..61b6d32 --- /dev/null +++ b/data/icons/misc/People-4.rdef @@ -0,0 +1,32 @@ +#include "application/AppResources.h" + +resource(kFourPeopleIcon) #'VICN' array { + $"6E636966120500020006023CADF43D104EBF02CA3EA2224BB02046648D00FFDB" + $"97FFFCAF29020006023CADF43D104EBF02CA3EA2224BB02046648D00D5DCFFFF" + $"9D9BD5020006023B804A3C0065BF02CA3EA2224BE70846C45D00EE9BB0FFCC58" + $"76020006023A6496BA3F153EBCDD3EEA9147D96A4458AB00FFF7EAFEFDD17B02" + $"0006023A6496BA3F153EBCDD3EEA9147D96A4458AB00FFFFFFFEA4A3D7020006" + $"023A6496BA3F153EBCDD3EEA9147D96A4458AB00FFE3EAFEF0A8BB020006023A" + $"B3673751B2BC59783FD2D74AF3F147385900C85805FFF06306020006023AB367" + $"3751B2BC59783FD2D74B03F147385900373583FF6967C0020006023AB3673751" + $"B2BC59783FD2D74B13F147785900A02646FFD53961020106033ABB7400000000" + $"00003AB5E049D1B1471E5B00F2F2F2AB7D7A7AFFBCA18404016C03A329040325" + $"23820371152D02000602388A280000000000004000004A3000C2000000C85804" + $"FFDC952F02000602388A280000000000004000004A4000C200000033318CFFA4" + $"A3D702000602388A280000000000004000004A4000C3000000AB123AFFDD718D" + $"0A0A0D36353646384838593C5B3E5B3E5C425E4858484A4A484A373D310A0B36" + $"353645384838593C5B3E5B3E5C425E424D444D443B0A063635443B4A374036C1" + $"57BAF73D310A08444D424D425E4858484A4A484A37443B0204402843283D283A" + $"2E3A2B3A3140343D344334462E4631462B02043F2AC0592ABE5B2A3A2F3AB7FB" + $"3AB9F93F34BE5B34C05934442F44B9F944B7FB0607FE2B42604D604860526058" + $"5E535FCC70CB135C585F5AC98AC8665D53CBEDC8915C51544F4A580A04424D42" + $"53484A444D0A0340364A3744340A043C5B3E5B3E4D3C4C1F0A0B0106000A0501" + $"022019170A1101082019170A000105301B1701178400040A0A0105201B170A00" + $"0100302A1A01178400040A030101202A1A0A060102202A1A0A090103202A1A0A" + $"0E0107202A1A0A110108202A1A0A000105302C1A01178400040A0A0105202C1A" + $"0A00010030101A01178400040A01010120101A0A04010220101A0A0701032010" + $"1A0A0C010720101A0A0F010820101A0A00010530101A01178400040A0A010520" + $"101A0A07010928101A15FF0A0001001001178400040A020101000A050102000A" + $"080103000A0D0107000A100108000A0001041001178400040A0A0104000A0801" + $"090815FF" +};