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

Table.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.
*/

#import "Table.h"

@implementation Table
- (id) init 
{
    if (self = [super init])
    {
      table = [[NSMutableArray alloc] init];
    }
    return self;
}
- (BOOL) addCell: (NSString*) text withSize: (float) size withRowspan: (int) rowspan 
    withColspan: (int) colspan atRow: (int) row 
{
    BOOL res = NO;
    printf ("addCell with size : %.2f\n", size);
    if (row < [table count])
    {
      TableCell* cell = [[TableCell alloc] initTextCell: text];
      [cell setBordered: YES];
      [cell setSize: size];
      [cell setRowspan: rowspan];
      [cell setColspan: colspan];
      printf ("rowspan : %d\n", [cell rowspan]);
      printf ("sizePercent : %.2f\n", [cell sizePercent]);
      [[table objectAtIndex: row] addObject: cell];
      res = YES;
    }
    return res;
}

- (void) addRow
{
    [table addObject: [NSMutableArray array]];
}

- (float) height
{
    return [table count] * 16;
}

- (void) setWidth: (float) width
{
    _width = width - 10;
}

- (NSSize) cellSize
{
    int width, height;

    if ((table != nil) && ([table count] > 0))
      height = 16 * [table count] + 3;
    else height = 16 + 3;
    
    if (_width <= 0) width = 300;
    else width = _width + 10;
    
    return NSMakeSize (width,height);
}

- (void) moveCellsFrom: (int) pos ofRow: (int) irow of: (int) nb
{
    int i;
    NSArray* row = [table objectAtIndex: irow];
    printf ("moveCellsFrom: %d ofRow: %d\n", pos, irow);
    for (i=0; i < [row count]; i++)
    {
      TableCell* cell = [row objectAtIndex: i];
      if ([cell x] >= pos) 
      {
          printf ("[%d] (%d)=><%d>\n", irow, [cell x], [cell x] + nb);
          [cell setX: [cell x] + nb];
      }
    }
}

- (int) numberOfCols
{
    int i, j, k;
    int ret = 0;

    for (i = 0; i < [table count]; i++)
    {
      NSArray* row = [table objectAtIndex: i];
      for (j = 0; j < [row count]; j++)
      {
          TableCell* cell = [row objectAtIndex: j];
          [cell setX: j];
      }
    }

    for (i = 0; i < [table count]; i++)
    {
      NSArray* row = [table objectAtIndex: i];
      
      for (j = 0; j < [row count]; j++)
      {
          TableCell* cell = [row objectAtIndex: j];
          if ([cell colspan] > 1)
          {
            if (j+1 < [row count])  
                [self moveCellsFrom: [cell x] +1 ofRow: i of: [cell colspan] - 1];
          }
          if ([cell rowspan] > 1)
          {
            for (k = 1; k < [cell rowspan]; k++)
            {
                if (i+k < [table count]) 
                {
                  // On doit décaler toutes les cellules de la 
                  // ligne du dessous à partir de cette position
                  [self moveCellsFrom: [cell x] ofRow: i+k of: [cell colspan]];
                }
            }
          }
      }
    }
    for (i = 0; i < [table count]; i++)
    {
      NSArray* row = [table objectAtIndex: i];
      for (j = 0; j < [row count]; j++)
      {
          TableCell* cell = [row objectAtIndex: j];
          if([cell x] > ret) ret = [cell x];
      }
    }
    ret++; // (vu qu'on commence à l'index 0)
    printf ("ret final : %d\n", ret);
    return ret;
}

- (void) drawInteriorWithFrame: (NSRect) cellFrame
    inView: (NSView*) controllView
{
    int i,j;
    float width = cellFrame.size.width -3;
    int cols = [self numberOfCols];

    printf ("cellFrame : x <%.2f> y <%.2f> w <%.2f> h <%.2f>\n", cellFrame.origin.x,
          cellFrame.origin.y, cellFrame.size.width, cellFrame.size.height);
    printf ("table count : %d \n", [table count]);
    
    
    for (i = 0; i < [table count]; i++)
    {
      NSArray* row = [table objectAtIndex: i];
      printf ("row count : %d \n", [row count]);
      for (j = 0; j < [row count]; j++)
      {
          NSRect rect;
          TableCell* cell = [row objectAtIndex: j];
          float widthCell = width / cols;
          rect = NSMakeRect (cellFrame.origin.x + 2 + widthCell*[cell x], 
                  cellFrame.origin.y + 2 + i*16, widthCell*[cell colspan] - 1, 16*[cell rowspan] - 1);
          [cell drawWithFrame: rect inView: controllView];
          printf ("[%d]==>(%d)\n", i, [cell x]);
      }
    }
}
@end

@implementation TableCell

- (void) setX: (int) px { x = px; }
- (void) setY: (int) py { y = py; }
- (int) x { return x; }
- (int) y { return y; }
- (int) colspan { return colspan; }
- (int) rowspan { return rowspan; }
- (void) setColspan: (int) col { colspan = col; }
- (void) setRowspan: (int) row { rowspan = row; }

- (void) setSize: (float) percent
{
    sizeIsPixel = NO;
    sizePercent = percent;
}

- (float) sizePercent
{
    return sizePercent;
}

@end

Generated by  Doxygen 1.6.0   Back to index