/**
Adds a new entry with title as its title at the end of the NSForm and returns the NSFormCell.
See Also: -insertEntry:atIndex: -removeEntryAtIndex:
*/ - (NSFormCell*) addEntry: (NSString*)title { return [self insertEntry: title atIndex: [self numberOfRows]]; } /**Inserts a new entry with title as its title at the index index of the NSForm and returns the NSFormCell.
See Also: -addEntry: -removeEntryAtIndex:
*/ - (NSFormCell*) insertEntry: (NSString*)title atIndex: (NSInteger)index { NSFormCell *new_cell = [[[object_getClass(self) cellClass] alloc] initTextCell: title]; [self insertRow: index]; [self putCell: new_cell atRow: index column: 0]; RELEASE (new_cell); return new_cell; } /**Removes the entry at index index.
See Also: -insertEntry:atIndex: -addEntry:
*/ - (void) removeEntryAtIndex: (NSInteger)index { [[NSNotificationCenter defaultCenter] removeObserver: self name: _NSFormCellDidChangeTitleWidthNotification object: [self cellAtRow: index column: 0]]; [self removeRow: index]; } /* Overriding this method allows decoding stuff to be inherited simpler by NSForm */ - (void) putCell: (NSCell*)newCell atRow: (NSInteger)row column: (NSInteger)column { if (column > 0) { NSLog (@"Warning: NSForm: tried to add a cell in a column > 0"); return; } [super putCell: newCell atRow: row column: column]; [self setValidateSize: YES]; [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(_setTitleWidthNeedsUpdate:) name: _NSFormCellDidChangeTitleWidthNotification object: newCell]; } - (void) dealloc { [[NSNotificationCenter defaultCenter] removeObserver: self name: _NSFormCellDidChangeTitleWidthNotification object: nil]; [super dealloc]; } /**Sets whether then NSForm's entries have bezeled border.
See Also: [NSCell-setBezeled:]
*/ - (void) setBezeled: (BOOL)flag { NSInteger i, count = [self numberOfRows]; /* Set the bezeled attribute to the cell prototype */ [[self prototype] setBezeled: flag]; for (i = 0; i < count; i++) [[self cellAtRow: i column: 0] setBezeled: flag]; } /**Sets whether then NSForm's entries have border
See Also: [NSCell-setBordered:]
*/ - (void) setBordered: (BOOL)flag { NSInteger i, count = [self numberOfRows]; /* Set the bordered attribute to the cell prototype */ [[self prototype] setBordered: flag]; for (i = 0; i < count; i++) [[self cellAtRow: i column: 0] setBordered: flag]; } /**Sets the width of all entries to width
See Also: [NSMatrix-setCellSize:]
*/ - (void) setEntryWidth: (float)width { NSSize size = [self cellSize]; size.width = width; [self setCellSize: size]; } /**Sets the size of the frame to aSize
See Also: [NSView-setFrameSize:]
*/ - (void) setFrameSize: (NSSize)aSize { [super setFrameSize: aSize]; // Set the width of the entries independent of autosizesCells _cellSize.width = _bounds.size.width; } /**Sets the spacing between all entries to spacing. By default the spacing is 4.
See Also: [NSMatrix-setIntercellSpacing:]
*/ - (void) setInterlineSpacing: (CGFloat)spacing { [self setIntercellSpacing: NSMakeSize(0, spacing)]; } /* For the title attributes we use the corresponding attributes from the cell. For the text attributes we use instead the attributes inherited from the NSCell class. */ /**Sets the text alignment of the title to aMode for all entries. See NSTextAlignment for more informations. The default title alignment is NSLeftTextAlignment
See Also: [NSFormCell-setTitleAlignment:] -setTextAlignment:
*/ - (void) setTitleAlignment: (NSTextAlignment)aMode { NSInteger i, count = [self numberOfRows]; /* Set the title alignment attribute to the cell prototype */ [[self prototype] setTitleAlignment: aMode]; for (i = 0; i < count; i++) [[self cellAtRow: i column: 0] setTitleAlignment: aMode]; } /**Sets the text alignment to aMode for all entries. See NSTextAlignment for more informations. The default text alignment is NSRightTextAlignment
See Also: -setTitleAlignment: [NSCell-setAlignment:]
*/ - (void) setTextAlignment: (NSTextAlignment)aMode { NSInteger i, count = [self numberOfRows]; /* Set the text alignment attribute to the cell prototype */ [[self prototype] setAlignment: aMode]; for (i = 0; i < count; i++) [[self cellAtRow: i column: 0] setAlignment: aMode]; } /**Sets the text font of the title to fontObject for all entries
See Also: [NSFormCell-setTitleFont:] -setTextFont:
*/ - (void) setTitleFont: (NSFont*)fontObject { NSInteger i, count = [self numberOfRows]; /* Set the title font attribute to the cell prototype */ [[self prototype] setTitleFont: fontObject]; for (i = 0; i < count; i++) [[self cellAtRow: i column: 0] setTitleFont: fontObject]; } /**Sets the text font to fontObject for all entries
See Also: [NSCell-setFont:] -setTitleFont:
*/ - (void) setTextFont: (NSFont*)fontObject { NSInteger i, count = [self numberOfRows]; /* Set the text font attribute to the cell prototype */ [[self prototype] setFont: fontObject]; for (i = 0; i < count; i++) [[self cellAtRow: i column: 0] setFont: fontObject]; } /**Sets the title writing direction to direction for all entries
See Also: [NSFormCell-setTitleBaseWritingDirection:] -setTextBaseWritingDirection:
*/ - (void) setTitleBaseWritingDirection: (NSWritingDirection)direction { NSInteger i, count = [self numberOfRows]; /* Set the writing direction attribute to the cell prototype */ [[self prototype] setTitleBaseWritingDirection: direction]; for (i = 0; i < count; i++) [[self cellAtRow: i column: 0] setTitleBaseWritingDirection: direction]; } /**Sets the contents writing direction to direction for all entries
See Also: [NSCell-setBaseWritingDirection:] -setTitleBaseWritingDirection:
*/ - (void) setTextBaseWritingDirection: (NSWritingDirection)direction { NSInteger i, count = [self numberOfRows]; /* Set the writing direction attribute to the cell prototype */ [[self prototype] setBaseWritingDirection: direction]; for (i = 0; i < count; i++) [[self cellAtRow: i column: 0] setBaseWritingDirection: direction]; } /**Returns the index of the entry specified by aTag or -1 if aTag is not found in entries.
See Also: [NSMatrix-cellAtRow:column:]
*/ - (NSInteger) indexOfCellWithTag: (NSInteger)aTag { NSInteger i, count = [self numberOfRows]; for (i = 0; i < count; i++) if ([[self cellAtRow: i column: 0] tag] == aTag) return i; return -1; } /**Returns the index of the current selected entry.
[NSMatrix-selectedRow]
*/ - (NSInteger) indexOfSelectedItem { return [self selectedRow]; } /**Returns the NSFormCell at index index
See Also: [NSMatrix-cellAtRow:column:]
*/ - (id) cellAtIndex: (NSInteger)index { return [self cellAtRow: index column: 0]; } -(void) _setTitleWidthNeedsUpdate: (NSNotification*)notification { [self setValidateSize: YES]; } - (void) setValidateSize: (BOOL)flag { _title_width_needs_update = flag; // TODO: Think about reducing redisplaying if (flag) [self setNeedsDisplay]; } - (void) calcSize { NSInteger i, count = [self numberOfRows]; CGFloat new_title_width = 0; CGFloat candidate_title_width = 0; NSRect rect; // Compute max of title width in the cells for (i = 0; i < count; i++) { candidate_title_width = [_cells[i][0] titleWidth]; if (candidate_title_width > new_title_width) new_title_width = candidate_title_width; } // Suggest this max as title width to all cells rect = NSMakeRect (0, 0, new_title_width, 0); for (i = 0; i < count; i++) { [_cells[i][0] calcDrawInfo: rect]; } _title_width_needs_update = NO; } - (void) drawRect: (NSRect)rect { if (_title_width_needs_update) [self calcSize]; [super drawRect: rect]; } /**Draws the NSFormCell at the specified index
See Also: -cellAtIndex: [NSCell-drawWithFrame:inView:] [NSMatrix-cellFrameAtRow:column:]
*/ - (void) drawCellAtIndex: (NSInteger)index { id theCell = [self cellAtIndex: index]; [theCell drawWithFrame: [self cellFrameAtRow: index column: 0] inView: self]; } - (void) drawCellAtRow: (NSInteger)row column: (NSInteger)column { [self drawCellAtIndex: row]; } /**Selects the text in the entry specified by index.
[NSMatrix-selectTextAtRow:column:]
*/ - (void) selectTextAtIndex: (NSInteger)index { [self selectTextAtRow: index column: 0]; } @end