Codebase list agenda.app / upstream/0.44 AppointmentView.m
upstream/0.44

Tree @upstream/0.44 (Download .tar.gz)

AppointmentView.m @upstream/0.44raw · history · blame

/* emacs buffer mode hint -*- objc -*- */

#import "AppointmentView.h"
#import "StoreManager.h"
#import "defines.h"

static NSImage *_repeatImage;
static NSImage *_alarmImage;
static NSImage *_checkMark;

@implementation AppointmentView
+ (void)initialize
{
  _repeatImage = [NSImage imageNamed:@"repeat.tiff"];
  _alarmImage = [NSImage imageNamed:@"small-bell.tiff"];
  _checkMark = [NSImage imageNamed:@"NSMenuCheckmark"];
}

- (NSImage *)repeatImage
{
  return _repeatImage;
}

- (NSImage *)alarmImage
{
  return _alarmImage;
}

- (id)initWithFrame:(NSRect)frameRect appointment:(Event *)apt
{
  if ((self = [super initWithFrame:frameRect])) {
    ASSIGN(_apt, apt);
    [self tooltipSetup];
    [[NSNotificationCenter defaultCenter] addObserver:self 
					     selector:@selector(configChanged:) 
						 name:SAConfigManagerValueChanged 
					       object:nil];
  }
  return self;
}

- (void)dealloc
{
  [[NSNotificationCenter defaultCenter] removeObserver:self];
  RELEASE(_apt);
  [super dealloc];
}

- (Event *)appointment
{
  return _apt;
}

- (BOOL)acceptsFirstResponder
{
  return YES;
}

- (NSMenu *)menuForEvent:(NSEvent *)event
{
  NSEnumerator *enm;
  MemoryStore *store;
  NSMenu *menu, *calendars;
  id <NSMenuItem> item;
  int index = 0;

  if ([event type] != NSRightMouseDown)
    return nil;

  calendars = [[NSMenu alloc] initWithTitle:_(@"Calendars")];
  [calendars setAutoenablesItems:NO];
  enm = [[StoreManager globalManager] storeEnumerator];
  while ((store = [enm nextObject])) {
    if ([store enabled] && [store writable]) {
      item = [calendars insertItemWithTitle:[store description] action:@selector(setStore:) keyEquivalent:nil atIndex:index++];
      [item setTarget:self];
      [item setRepresentedObject:store];
      if (store == [_apt store]) {
	[item setImage:_checkMark];
	[item setEnabled:NO];
      }
    }
  }
  menu = [[NSMenu alloc] initWithTitle:_(@"Appointment")];
  item = [menu insertItemWithTitle:_(@"Calendars") 
			    action:NULL
		     keyEquivalent:nil
			   atIndex:0];
  [menu setSubmenu:calendars forItem:item];
  [calendars autorelease];
  return [menu autorelease];
}

- (void)setStore:(id)sender
{
  [[StoreManager globalManager] moveElement:_apt 
				    toStore:[sender representedObject]];
}

- (void)changeSticky:(id)sender
{
  [_apt setSticky:![_apt sticky]];
  [[_apt store] update:_apt];
  [self setNeedsDisplay:YES];
}

- (void)tooltipSetup
{
  NSAttributedString *as = [_apt text];

  if ([[ConfigManager globalConfig] integerForKey:TOOLTIP] && as && [as length] > 0)
    [self setToolTip:[as string]];
  else
    [self setToolTip:nil];
}

- (void)configChanged:(NSNotification *)not
{
  NSString *key = [[not userInfo] objectForKey:@"key"];

  if ([key isEqualToString:TOOLTIP])
    [self tooltipSetup];
  else if ([key isEqualToString:ST_COLOR] || [key isEqualToString:ST_TEXT_COLOR])
    [self setNeedsDisplay:YES];
}
@end