Logo Search packages:      
Sourcecode: helpviewer.app version File versions  Download package

NoteCell.m

/*
    This file is part of HelpViewer (http://www.roard.com/helpviewer)
    Copyright (C) 2003 Nicolas Roard (nicolas@roard.com)

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/

#include "NoteCell.h"

@implementation NoteCell

- (id) initWithTextView: (NSTextView*) textview 
{
    [super init];
    _image = nil;
    _note = nil;
    _color = nil;
    [self resizeWithTextView: textview];
    return self;    
}

- (void) setText: (NSMutableAttributedString*) text
{
    ASSIGN (_note, text);
}

- (void) setImage:  (NSImage*) img
{
    ASSIGN (_image, img);
}

- (void) setColor: (NSColor*) color
{
    ASSIGN (_color, color);
}

- (NSSize) cellSize 
{
    return _size;
}

- (void) resize: (id) sender
{
      [self resizeWithTextView: [sender object]];
}

- (void) resizeWithTextView: (NSTextView*) textView
{
    float height = [_image size].height;

    float heighttext;
      float imageWidth = [_image size].width;
      float imageHeight = [_image size].height;   
      float border = 12;
      float Margin = ([textView bounds].size.width - 16 - imageWidth- border);

      NSMutableParagraphStyle* paragraph = [NSMutableParagraphStyle new];
      [paragraph setAlignment: NSLeftTextAlignment];
      [paragraph setTailIndent: Margin];
      
      NSDictionary* attributes = [NSDictionary dictionaryWithObject: paragraph 
          forKey: NSParagraphStyleAttributeName];

      [_note addAttributes: attributes range: NSMakeRange (0, [_note length])];

      heighttext = [_note size].height;

    NSLog (@"heightext : %.2f height : %.2f", heighttext, height);
    if (heighttext > height) height = heighttext;

    float width = [textView bounds].size.width - 16;
    if (width <= 0) width = 375;

    _size = NSMakeSize (width, height);
}

- (void) drawWithFrame: (NSRect) cellFrame
    inView: (NSView*) controlView
{
      if (![controlView window])
                  return;

        [controlView lockFocus];

      //[[NSColor colorWithCalibratedRed: 0.62 green: 0.71 blue: 0.84 alpha:1.0] set];
      //[[NSColor colorWithCalibratedRed: 0.81 green: 0.84 blue: 0.88 alpha:1.0] set];
      //[[NSColor colorWithCalibratedRed: 0.88 green: 0.78 blue: 0.78 alpha:1.0] set];
      [_color set];

      //NSRectFill (cellFrame);

      //[[NSColor blackColor] set];

      NSBezierPath* path = [[NSBezierPath alloc] init];

      float radius = 8;

      NSPoint p1 = NSMakePoint (cellFrame.origin.x, cellFrame.origin.y + radius);
      NSPoint p2 = NSMakePoint (cellFrame.origin.x, cellFrame.origin.y + cellFrame.size.height - radius);
      NSPoint p3 = NSMakePoint (cellFrame.origin.x + radius, cellFrame.origin.y + cellFrame.size.height);
      NSPoint p4 = NSMakePoint (cellFrame.origin.x + cellFrame.size.width - radius, cellFrame.origin.y + cellFrame.size.height);
      NSPoint p5 = NSMakePoint (cellFrame.origin.x + cellFrame.size.width, cellFrame.origin.y + cellFrame.size.height - radius);
      NSPoint p6 = NSMakePoint (cellFrame.origin.x + cellFrame.size.width, cellFrame.origin.y + radius);
      NSPoint p7 = NSMakePoint (cellFrame.origin.x + cellFrame.size.width - radius, cellFrame.origin.y);
      NSPoint p8 = NSMakePoint (cellFrame.origin.x + radius, cellFrame.origin.y);

      NSPoint pr1 = NSMakePoint (cellFrame.origin.x + radius, cellFrame.origin.y + cellFrame.size.height - radius);
      NSPoint pr2 = NSMakePoint (cellFrame.origin.x + cellFrame.size.width - radius, cellFrame.origin.y + cellFrame.size.height - radius);
      NSPoint pr3 = NSMakePoint (cellFrame.origin.x + cellFrame.size.width - radius, cellFrame.origin.y + radius);
      NSPoint pr4 = NSMakePoint (cellFrame.origin.x + radius, cellFrame.origin.y + radius);

      [path moveToPoint: p1];
      [path lineToPoint: p2];
      //[path appendBezierPathWithArcFromPoint: p2 toPoint: p3 radius: radius];
      [path appendBezierPathWithArcWithCenter: pr1 radius: radius startAngle: 180 endAngle: 90 clockwise: YES];
      //[path moveToPoint: p3];
      [path lineToPoint: p4];
      //[path appendBezierPathWithArcFromPoint: p4 toPoint: p5 radius: radius];
      [path appendBezierPathWithArcWithCenter: pr2 radius: radius startAngle: 90 endAngle: 0 clockwise: YES];
      //[path moveToPoint: p5];
      [path lineToPoint: p6];
      //[path appendBezierPathWithArcFromPoint: p6 toPoint: p7 radius: radius];
      [path appendBezierPathWithArcWithCenter: pr3 radius: radius startAngle: 0 endAngle: 270 clockwise: YES];
      //[path moveToPoint: p7];
      [path lineToPoint: p8];
      //[path appendBezierPathWithArcFromPoint: p8 toPoint: p1 radius: radius];
      [path appendBezierPathWithArcWithCenter: pr4 radius: radius startAngle: 270 endAngle: 180 clockwise: YES];
      [path fill];

      if (_note)
      {
              
            int i;
            float interspace = 20;
            float imageWidth = [_image size].width;
            float imageHeight = [_image size].height;   
            float spaceMargin = 20;
            float border = 12;
            //NSLog (@"cellFrame.size.width : %.2f", cellFrame.size.width);
            float Margin = (cellFrame.size.width - imageWidth- border);
      
            NSMutableParagraphStyle* paragraph = [NSMutableParagraphStyle new];
            [paragraph setAlignment: NSLeftTextAlignment];
            [paragraph setTailIndent: Margin];
            
            NSDictionary* attributes = [NSDictionary dictionaryWithObject: paragraph 
                forKey: NSParagraphStyleAttributeName];

            [_note addAttributes: attributes range: NSMakeRange (0, [_note length])];
            NSSize sizenote = [_note size];

            float posy = 0;
            if (sizenote.height < cellFrame.size.height)
            {
                  posy = (cellFrame.size.height - sizenote.height) / 2;
            }
            posy += cellFrame.origin.y;
            
            NSPoint imageOrigin = NSMakePoint (cellFrame.origin.x, cellFrame.origin.y + cellFrame.size.height);
            if (cellFrame.size.height > imageHeight)
            {
                  imageOrigin = NSMakePoint (cellFrame.origin.x, cellFrame.origin.y + 
                  cellFrame.size.height - (cellFrame.size.height - imageHeight)/2);
            }
            
            [_image compositeToPoint: imageOrigin operation: NSCompositeSourceAtop];
            

            [_note drawAtPoint: NSMakePoint (cellFrame.origin.x + imageWidth + border, posy)];
      }
      [controlView unlockFocus];
}

@end

Generated by  Doxygen 1.6.0   Back to index