StatusMenuItem.cpp 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. /*
  2. * Copyright 2009, Pier Luigi Fiorini. All rights reserved.
  3. * Distributed under the terms of the MIT License.
  4. *
  5. * Authors:
  6. * Pier Luigi Fiorini, pierluigi.fiorini@gmail.com
  7. */
  8. #include <string.h>
  9. #include <Bitmap.h>
  10. #include <Menu.h>
  11. #include <libinterface/BitmapUtils.h>
  12. #include "AppResources.h"
  13. #include "StatusMenuItem.h"
  14. #include "Utils.h"
  15. const float kSize = 16;
  16. const float kCircle = 12;
  17. StatusMenuItem::StatusMenuItem(const char* label, UserStatus status,
  18. bool custom, char shortcut, uint32 modifiers)
  19. :
  20. BitmapMenuItem(label, NULL, NULL, shortcut, modifiers),
  21. fStatus(status),
  22. fCustom(custom)
  23. {
  24. BMessage* msg = new BMessage(kSetStatus);
  25. msg->AddInt32("status", fStatus);
  26. msg->AddBool("custom", fCustom);
  27. SetMessage(msg);
  28. SetIcon();
  29. }
  30. UserStatus
  31. StatusMenuItem::Status() const
  32. {
  33. return fStatus;
  34. }
  35. bool
  36. StatusMenuItem::IsCustom() const
  37. {
  38. return fCustom;
  39. }
  40. void
  41. StatusMenuItem::SetIcon()
  42. {
  43. BResources res = ChatResources();
  44. if (res.InitCheck() != B_OK)
  45. return;
  46. int32 num = 0;
  47. switch (fStatus) {
  48. case STATUS_ONLINE:
  49. num = kOnlineReplicant;
  50. break;
  51. case STATUS_AWAY:
  52. num = kAwayReplicant;
  53. break;
  54. case STATUS_DO_NOT_DISTURB:
  55. num = kBusyReplicant;
  56. break;
  57. case STATUS_CUSTOM_STATUS:
  58. num = kIconReplicant;
  59. break;
  60. case STATUS_INVISIBLE:
  61. case STATUS_OFFLINE:
  62. num = kOfflineReplicant;
  63. break;
  64. default:
  65. break;
  66. }
  67. BBitmap* bitmap = IconFromResources(&res, num, B_MINI_ICON);
  68. SetBitmap(bitmap);
  69. }