check-label.cpp 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. #if defined(Hiro_CheckLabel)
  2. @implementation CocoaCheckLabel : NSButton
  3. -(id) initWith:(hiro::mCheckLabel&)checkLabelReference {
  4. if(self = [super initWithFrame:NSMakeRect(0, 0, 0, 0)]) {
  5. checkLabel = &checkLabelReference;
  6. [self setTarget:self];
  7. [self setAction:@selector(activate:)];
  8. [self setButtonType:NSSwitchButton];
  9. }
  10. return self;
  11. }
  12. -(IBAction) activate:(id)sender {
  13. checkLabel->state.checked = [self state] != NSOffState;
  14. checkLabel->doToggle();
  15. }
  16. @end
  17. namespace hiro {
  18. auto pCheckLabel::construct() -> void {
  19. @autoreleasepool {
  20. cocoaView = cocoaCheckLabel = [[CocoaCheckLabel alloc] initWith:self()];
  21. pWidget::construct();
  22. setChecked(state().checked);
  23. setText(state().text);
  24. }
  25. }
  26. auto pCheckLabel::destruct() -> void {
  27. @autoreleasepool {
  28. [cocoaView removeFromSuperview];
  29. [cocoaView release];
  30. }
  31. }
  32. auto pCheckLabel::minimumSize() const -> Size {
  33. Size size = pFont::size(self().font(true), state().text);
  34. return {size.width() + 20, size.height()};
  35. }
  36. auto pCheckLabel::setChecked(bool checked) -> void {
  37. @autoreleasepool {
  38. [cocoaView setState:checked ? NSOnState : NSOffState];
  39. }
  40. }
  41. auto pCheckLabel::setGeometry(Geometry geometry) -> void {
  42. pWidget::setGeometry({
  43. geometry.x() - 2, geometry.y(),
  44. geometry.width() + 4, geometry.height()
  45. });
  46. }
  47. auto pCheckLabel::setText(const string& text) -> void {
  48. @autoreleasepool {
  49. [cocoaView setTitle:[NSString stringWithUTF8String:text]];
  50. }
  51. }
  52. }
  53. #endif